WPFが新しく、データを単純なListBoxにバインドする際に問題があります。私は私がShowListと呼ばれる表示オブジェクトののObservableCollectionするItemsSourceプロパティを設定し、背後にあるコードで、その後 WPFリストボックスのバインディングが表示されない
<ListBox Name="lbxShows" />
MainWindow.XAML
でそれを設定しました。これは実際にはOasisInstがインスタンス(MainApplicationのコンストラクターでの設定)である別のクラス(Oasis)のプロパティです。InitializeComponent();
mainApp = new MainApplication();
lbxShows.ItemsSource = mainApp.OasisInst.ShowList;
この時点で、ShowListにはアイテムはありませんが、後で追加されるものもあり、ListBoxには表示されません。
Oasisクラスのコードは、INotifyPropertyChangedインターフェイスを実装し、ShowList設定ツールから呼び出されるテキストブックメソッドを持っています。
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
PropertyChangedは、PropertyChangedEventHandlerイベントです。
デバッグモードでステップスルーすると、PropertyChangedがnullになるので、自分のイベントを購読していないようです。これは通常、バインディング(私は思う?)を介して自動的に起こることを考えれば、バインディングが正しく設定されていないと推測しています。
ItemsSourceプロパティだけを設定するだけでは、バインドをセットアップするには不十分ですか?
_ "Oasisクラス用のコードはINotifyPropertyChangedインターフェイスを実装しています" _ - ShowList'プロパティの値を変更しない限り、これは無関係です。 'ShowList'プロパティの値を変更する、つまり新しいコレクション全体を作成し、プロパティ値をそのコレクションを参照するように設定すると、インターフェイスを実装するだけでは不十分です。実際には、プロパティを単に設定するのではなく、ターゲットの 'ItemsSource'プロパティに実際にバインドする必要があります。通常、これはXAMLで行われますが、あなたが主張している場合はコードビハインドで行うこともできます。 –
良い[mcve]がなければ、コードがうまくいかない理由を正確に知ることができないため、あなたの質問は正当な理由ではありません。あなたの質問を修正してください。 –