我一直在爭取讓數據綁定在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