我一直在努力让数据绑定在WPF中工作一周多一点 . 我在这里得到了关于DataContext的宝贵帮助,我确实通过DependencyProperties获得了数据绑定 . 在我学习数据绑定的同时,我遇到了很多关于 INotifyPropertyChanged
的讨论,以及它在很多方面比DP更好 . 我想我会试一试并尝试一下 .
我正在使用Josh Smith的基础ViewModel类,我的ViewModel是从它派生的 . 但是,我在使数据绑定工作时遇到了一些麻烦,我希望有人可以告诉我哪里出错了 .
在我的ViewModel类中,我有一个 ObservableCollection<string>
. 在我的GUI中,我有一个与此OC绑定的组合框,即
<ComboBox ItemsSource="{Binding PluginNames}" />
GUI的DataContext设置为ViewModel,即
private ViewModel _vm;
public GUI()
{
InitializeComponent();
_vm = new ViewModel();
this.DataContext = _vm;
}
并且ViewModel的OC名为“PluginNames”:
public class ViewModel
{
public ObservableCollection<string> PluginNames; // this gets instantiated and added to elsewhere
}
加载GUI时,会调用一个实例化OC并将插件名称添加到其中的方法 . 修改OC后,我调用 RaisePropertyChanged( "PluginNames")
. 我期待由于WPF数据绑定模型认识到INotifyPropertyChanged,这就是我需要做的所有事情,并且它会用加载的插件更新组合框项目......但事实并非如此 .
有谁可以指出我在这里做错了什么?谢谢!
更新:我不知道为什么,但现在没有做任何明显的更新,它根本没有找到属性 . 我想我真的很傻,错过了某个重要的一步 .
2 回答
看起来你已经暴露了字段而不是属性 . 绑定仅适用于属性...将其更改为:
当您使用
INotifyPropertyChanged
时,有两件事:您需要使用属性,而不是字段
设置hte属性时,应始终引发属性更改事件 .
你会想要重做这个看起来更像是:
这应该导致一切都重新填充 .