【问题标题】:MVVM INotifyPropertyChanged in dynamically changed arrays动态更改数组中的 MVVM INotifyPropertyChanged
【发布时间】:2013-02-26 11:53:06
【问题描述】:

在我的爱好项目中,我有以下情况:

我正在使用 C#、WPF、MVVM(以及 MVVM:尝试)

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

我有窗口,其中我将列表视图绑定到映射结构。

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

有什么解决办法吗?

字节列表也可以是 45 MB 的数据。如果我在列表上设置通知,是否意味着对于每个字节更改我都会收到所有观察者的通知?意思是什么时候我会复制例如10KB 的字节一个接一个,我想要 100 万次更新中的 100 个观察函数(处理属性更改)?那将是性能杀手。

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

【问题讨论】:

    标签: c# wpf mvvm inotifypropertychanged


    【解决方案1】:

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

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

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

    【讨论】:

    • 最后一种方法似乎最好;我认为与我现在使用的类似的东西(但很容易弄得一团糟)。
    【解决方案2】:

    您可以绑定到ObservableCollection<T>

    【讨论】:

    • 你的意思是完整的字节列表吗?这将是所有项目......不确定这是否是一个好主意。这意味着更新所有类和所有属性。
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2012-06-23
    • 2016-08-09
    • 1970-01-01
    • 2015-02-21
    • 2016-01-30
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多