我一直在争取让数据绑定在WPF中工作一个多星期。我在这里获得了关于DataContext的宝贵帮助,并且我确实通过DependencyProperties获得了数据绑定。在我学习数据绑定的同时,我遇到了许多关于INotifyPropertyChanged
的讨论,以及它在很多方面比DP更好。我想我会试一试并尝试一下。使用INotifyPropertyChanged而不是DependencyProperties进行数据绑定
我使用乔希史密斯的基础ViewModel类和我的ViewModel派生自它。但是,我在数据绑定工作方面遇到了一些麻烦,希望有人能告诉我哪里出错了。
在我的ViewModel类中,我有一个ObservableCollection<string>
。在我的GUI,我有一个绑定到该OC组合框,即
<ComboBox ItemsSource="{Binding PluginNames}" />
的GUI的DataContext设置为视图模型,即
private ViewModel _vm;
public GUI()
{
InitializeComponent();
_vm = new ViewModel();
this.DataContext = _vm;
}
和视图模型具有名为OC“PluginNames” :
public class ViewModel
{
public ObservableCollection<string> PluginNames; // this gets instantiated and added to elsewhere
}
当加载GUI时,会调用一个方法来实例化OC并向其添加插件名称。 OC被修改后,我致电RaisePropertyChanged("PluginNames")
。我期待着,因为WPF数据绑定模型认识到INotifyPropertyChanged,这就是我需要做的一切,它会“神奇地工作”,并使用已加载的插件更新组合框项目......但事实并非如此。
有人可以指出我在这里做了什么错吗?谢谢!
更新:我不知道为什么,但现在,而不是做任何明显的更新,它没有找到属性。我认为我很愚蠢,并且在某个地方失去了重要的一步。
请勿使用自动属性 - 它们不会引发PropertyChanged事件。 – itowlson 2009-12-29 19:56:38
绝对正确。哎呀!我最终会在这件事上变得更好。 :) – Dave 2009-12-29 19:57:20
在这里接受最古老的正确答案是正确的礼节吗?我假设如此。 – Dave 2009-12-29 19:58:11