我正在编写一个C# mvvm应用程序,其中我在UI层上有一个大的域模型,其中包含嵌套的分层对象。大域模型对象有许多嵌套对象,它们都实现了INotifyPropertyChanged。现在可以假设大模型是一个作业,而作业在其生命周期中会被填充数据,直到它被发送出去。作业在其生存期内被操作,它是一个活动的实体对象,而不是简单的值对象(struct)。
根对象本身也可以通过INotifyPropertyChanged观察到,这导致了两个问题:
到目前为止的想法:
我不太清楚哪一种方法更好,但我倾向于第二种选择。在我的用例中,我将有不同的侦听器,它们可能对大模型的不同级别感兴趣,而且集合中还有一些动态对象(项可以频繁地添加和删除,侦听器需要对此做出反应,例如更新ViewModels中的列表)。
发布于 2019-11-28 21:15:50
C#如何观察深度嵌套的动态对象?
理想情况下,您不应该使用动态类型或真正在运行时创建的类型。禁用编译时类型安全性较差。但动态可以直接“感染”其他类型。如果在部分计算中使用动态,则函数的返回值也会变为动态的。但我认为你彻底考虑了所有其他选择。
如果您必须继续使用动态类型,请考虑使用ExpandoObject。它似乎直接适合这份工作。实际上,它不过是一个带有一些语法糖的Dictionary<string, object> --最重要的是,根据所有“键”/“属性”上的INotifyPropertyChanged更改通知。
我不太明白深巢和这有什么关系。任何集合都需要3种类型的更改通知:
只要每个人都遵守这些规则,你就可以下一个你想要的深度。
如果您担心这方面的性能:
https://stackoverflow.com/questions/59096164
复制相似问题