gpt4 book ai didi

c# - 什么是不断变化的表格表示的最佳集合类型

转载 作者:行者123 更新时间:2023-12-03 10:33:23 26 4
gpt4 key购买 nike

我使用 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 做到了这一点:
 <DataGrid ItemsSource="{Binding CalculatedTable}">                
</DataGrid>

我绑定(bind)的CalculatedTable是一个DataTable

我如何使用它进行初始化的示例:
 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();
});
}

我担心 DataTable 和 DataGrid 是否是表示此类数据的最佳方式,或者是否会有另一种类型的 Collection 更适合我的需要。此外,看起来这个解决方案不是 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)'

最佳答案

就数据绑定(bind)而言,集合类型并不重要。某些类型的集合具有可以更快地查找项目等的特性,但这是另一回事。

您应该只绑定(bind)到源集合一次,然后更新集合中的各个项目。这需要数据类型来实现 INotifyPropertyChanged界面。内置DataRowView上课。

如果可以动态地从集合中添加或删除项目,您需要使用实现 INotifyCollectionChanged 的集合。或 IBindingListView界面。有ObservableCollection<T>类或 DataView您当前使用的类。

另请注意,没有理由使用 DataGrid如果您不打算编辑数据。那你不妨使用ListViewGridView .

关于c# - 什么是不断变化的表格表示的最佳集合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com