在我的应用程序模型中,我有一个“父母”列表,每个“父母”都引用一个“孩子”列表(例如,一个足球队列表,每个足球队都包含一个球员列表)。
我在树视图中可视化这个列表。我为树创建了一个视图模型类,为足球队创建了一个视图模型类(我们称之为“footballteamViewModel”)。树的类包含带有 footballteamViewModel-items 的 ObservableCollection。树的项目源是这个 ObservableCollection。在初始化期间,我为模型中的每个足球队创建一个对应的 footballteamViewModel 对象并将其添加到 ObservableCollection。
问题是,我的模型中的足球队列表可以从树的外部进行更改,并且我希望更新树。因此,如果有人从我的模型列表中删除了一个足球队,我将不得不删除我的足球队视图模型项目的 ObservableCollection 中的相应项目。
我无法将模型中的足球队列表直接绑定到视图。因此,每次更改模型中的集合时,我都必须以某种方式更新 ViewModel 中的 ObservableCollection。
我处理这个问题的方法是在模型中使用 ObservableCollection 并注册到 ViewModel 中的 collectionChanged 事件,以便在模型集合发生更改时更新我的 ViewModel(footballteamViewModel 对象的 Observable 集合)。但这并不“正确”。有没有更好的办法?
在键入此内容时,我发现另一篇文章描述了完全相同的问题:WPF/MVVM: Delegating a domain Model collection to a ViewModel。那里的答案鼓励我,我解决这个问题的方式并不是完全错误的,但我仍然想知道是否还有另一种方法。
编辑:从您提供的第一个答案中,我假设我的问题没有明确的答案。他们都很有帮助,所以值得一读。我只参考 Bindable Linq/Continous Linq/Optics 框架来标记答案,因为我认为它会帮助其他最容易被我的问题绊倒的人。