MVVM INotifyPropertyChanged在动态变化的数组

本文关键字:数组 变化 动态 INotifyPropertyChanged MVVM | 更新日期: 2023-09-27 18:01:16

在我的兴趣项目中,我有以下情况:

我正在使用c#, WPF, MVVM(好MVVM:尝试)

我加载一个包含信息的二进制文件,并将其存储在一个(无符号)字节列表中。我有一个类层次结构引用到列表中的特定位置。我的应用程序有时会更改类层次结构(和引用字节),但有时也会直接更改字节(如复制范围)。

我有一个窗口,在那里我绑定了一个列表视图映射的结构。

当改变类的属性时,我使用INotifyPropertyChanged,因为它应该在MVVM中使用。但是,我在直接更改字节时遇到了问题。目前我正在使用手动更新方法,但它变得非常混乱。

有什么解决办法吗?

同样,字节列表可以像45mb的数据。如果我在列表上设置一个通知是否意味着对于每一个字节的改变,我都会在所有观察者上得到一个通知?这意味着当我一个接一个地复制10KB字节时,我将在100万次更新中拥有100个观察者函数(处理属性更改)?这将是一个性能杀手。

或者我也可以这样说:现在更新类X(即类中的所有属性更改)。我不能使用set属性函数,因为在复制字节时值已经被改变了。

MVVM INotifyPropertyChanged在动态变化的数组

如果您将字节存储在列表(List<byte>)中,那么您可以简单地将列表的类型更改为ObservableCollection<byte>,您的代码将几乎不做任何更改地运行。然后你可以摆脱手动更新。

但是如果您将数据保存在字节数组(byte[])中,那么最好的选择是将其更改为ObservableCollection<byte>,但是您可能必须使用该集合更改一些代码。

如果你有特殊的情况要处理,另一个选择可能是创建自己的数据结构,实现INotifyPropertyChangedINotifyCollectionChanged。但是要写的代码太多了

你可以绑定到ObservableCollection<T> .