我是一个新手,只是学习DataContext
MVVM 模型的基础知识。我现在有一个网格绑定到实现 的视图模型对象INotifyPropertyChanged
,但似乎UpdateSourceTrigger
(所有 WPF 教程告诉我使用)不适用于 WinRT / Metro Style 应用程序!
那我该如何实现 INotifyPropertyChanged 呢?
我已经走到了尽头。我几乎一整天都在研究最基本的应用程序示例,只是在单击某些内容后尝试更新网格。到目前为止,我设法做到这一点的唯一方法是创建一个全新的视图模型实例并重新分配DataContext
我知道是错误的
更新:
我取得了一些进展,但事情变得非常奇怪。我有一个视图模型,带有一个通用的项目列表。项目列表与 PropertyChangedEventHandler 相连。如果我用一个新集合替换整个集合,则列表视图会更新。
model.Items = new List<DataItem>{ new DataItem{ Title = "new item" }};
这将产生一个包含上述项目的项目列表。但是,如果我尝试添加一个项目,没有任何反应
model.Items.Add(new DataItem{ Title = "added item" });
我还尝试创建一个添加项目并专门触发 PropertyChanged 的方法,但这也不起作用
这就是它变得奇怪的地方。接下来我尝试了这段代码。
model.Items.Add(new DataItem { Title = "added item" });
model.Items = new List<DataItem> { new DataItem { Title = "new item" }};
这会产生一个包含两个项目的列表:
- new item
- added item
怎么会这样?代码说,“添加一项”然后“替换整个列表”,但它以相反的顺序执行?
更新 2:
我已按照建议切换到 ObservableCollection,这实际上解决了最初的问题。我现在可以添加一个项目,它会显示在列表中。
但是,新的怪异行为仍然有效。在重置集合之前添加的项目将附加到新集合的末尾。为什么我的代码以相反的顺序执行?