私はデータバインディングを WPF で動作させることに 1 週間強取り組んできました。ここで 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 には「PluginNames」という名前の OC があります。
public class ViewModel
{
public ObservableCollection<string> PluginNames; // this gets instantiated and added to elsewhere
}
GUI がロードされると、OC をインスタンス化し、それにプラグイン名を追加するメソッドが呼び出されます。OC が変更された後、私は を呼び出しますRaisePropertyChanged( "PluginNames")
。WPF データバインディング モデルは INotifyPropertyChanged を認識しているため、これだけで「魔法のように動作」し、ロードされたプラグインでコンボボックス項目が更新されることを期待していましたが、そうではありません。
誰かが私がここで間違ったことを指摘できますか? ありがとう!
更新:理由はわかりませんが、明らかな更新を行わない代わりに、プロパティがまったく見つかりません。私は本当に愚かで、どこかで重要なステップを逃していると思います.