【发布时间】:2011-03-19 05:38:13
【问题描述】:
好吧,学习 MVVM 让我发疯。我知道这是很好的模式,我知道,但有时......
我有一个简单的图书编目应用程序。首先使用 EF 代码完成模型。它包含两个表authors 和books。现在,我有MainWindow,后面有MainWindowViewModel。在 MainWindow 中,我有一个绑定到 ViewModel 的列表框,如下所示:
<ListBox ItemContainerStyle="{DynamicResource ListBoxItemStyle1}"
ItemsSource="{Binding Authors, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Fullname"Name="AuthorsListBox" sSynchronizedWithCurrentItem="True"/>
在我的 DataContext (ViewModel) 中,“作者”是 ObservableCollection<Author>。目前一切似乎都很好。问题是:
我正在打开新窗口,简直太简单了,只有两个文本框和按钮来创建新作者
验证后,我单击按钮并将新的作者实体保存到数据库中。然后,我关闭"CreateAuthorWindow" 并返回MainWindow。
列表框中没有显示新的实体。我不能让它显示!我模型中的所有内容都实现了INotifyPropertyChanged。有没有办法做到这一点而不用手刷新? (实际上也不起作用......)
【问题讨论】:
-
您确定已将新作者添加到您的 ObservableCollection 中吗?在该集合的 INotifyPropertyChanged 上放置一个处理程序,并弹出一个消息框以检查该事件是否已触发以及它触发的属性名称。
-
我相信 ObservableColleciton 应该在“Count”和“Items”属性上触发 INotifyPropertyChange 事件,如果正在更改集合。
-
@Stephen Chung - 不完全;根据我的回答,它实际上会触发 NotifyCollectionChanged 事件:)
-
当您在 Visual Studion 的调试器中运行它时,打开输出窗口并查找数据绑定错误 - 有时您会犯什么错误令人惊讶。
-
@IanR,我不认为数据绑定使用来自 INotifyCollectionChanged 接口的 CollectionChanged 事件。它使用 ObservableCollection 也实现的 INotifyPropertyChanged 事件中的 PropertyChanged 事件。但不确定项目集合——它也可能作用于 INotifyCollectionChanged。
标签: .net wpf xaml data-binding mvvm