我使用MVVM代表WPF中的表格。表中每個元素的數據類型是int,如下所示:什麼是不斷變化的表格表示的最佳集合類型
0 1 2 3 1 2 12
0 1 3 3 1 3 12
0 1 2 3 5 2 12
0 1 2 3 1 2 12
與多維數組類似。從表中的數據是不斷變化的(從另一個線程,例如:每個第二)
我已設法通過使用數據網格這樣做:
<DataGrid ItemsSource="{Binding CalculatedTable}">
</DataGrid>
和CalculatedTable我勢必是數據表
的我如何使用它初始化一個例子:我如何改變它
CalculatedTable.Columns.Add("1", typeof(int));
CalculatedTable.Columns.Add("2", typeof(int));
CalculatedTable.Columns.Add("3", typeof(int));
CalculatedTable.Columns.Add("4", typeof(int));
CalculatedTable.Columns.Add("5", typeof(int));
CalculatedTable.Rows.Add(10, 12, 15, 2, 5);
CalculatedTable.Rows.Add(54, 21, 15, 2, 1);
CalculatedTable.Rows.Add(24, 13, 25, 11, 1);
CalculatedTable.Rows.Add(21, 32, 15, 13, 3);
CalculatedTable.Rows.Add(56, 45, 35, 19, 8);
例如:
Queue(() =>
{
UpdateTable();
});
void UpdateTable(){
DataRow dr = CalculatedTable.Rows[i];
addon = int.Parse(dr[0].ToString());
dr[0] = addon + 1;
OnPropertyChange(nameof(CalculatedTable));
Queue(() =>
{
UpdateTable();
});
}
我擔心,如果數據表和DataGrid是代表這種數據的最佳方式或是否會有另一種類型的收集這將更好地滿足我的需要。此外,它看起來像這樣的解決方案是不是100%線程安全的,因爲我有以下從時間例外的時間在我的輸出窗口:
System.Windows.Data Error: 17 : Cannot get '1' value (type 'Int32') from '' (type 'DataRowView'). BindingExpression:Path=1; DataItem='DataRowView' (HashCode=31910704); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') IndexOutOfRangeException:'System.IndexOutOfRangeException: Index was outside the bounds of the array. at System.Data.Common.Int32Storage.Get(Int32 record) at System.Data.DataRow.get_Item(DataColumn column, DataRowVersion version) at System.Data.DataRowView.GetColumnValue(DataColumn column) at System.Data.DataColumnPropertyDescriptor.GetValue(Object component) at MS.Internal.Data.ValueTable.GetValue(Object item, PropertyDescriptor pd, Boolean indexerIsNext) at MS.Internal.Data.PropertyPathWorker.GetValue(Object item, Int32 level) at MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)'
因此,如果我使用DataView就像使用ObservableCollection一樣,對實際數據表的任何更改都會改變視圖本身? – berthos
是的,當您在DataTable中設置單元格的值時,視圖將被更改。 – mm8
這是否回答你的問題?請記住接受答案。 – mm8