私はまったくの初心者でDataContext
、MVVM モデルの基礎を学んでいます。を実装するビューモデルオブジェクトにバインドされたグリッドを取得しましたINotifyPropertyChanged
が、UpdateSourceTrigger
(すべての WPF チュートリアルで使用するように指示されている) WinRT / Metro スタイル アプリでは使用できないようです!
INotifyPropertyChanged を実装するにはどうすればよいですか?
私はここで私のテザーの終わりにいます。私は、最も基本的なアプリの例にほぼ 1 日を費やし、何かをクリックした後にグリッドを更新しようとしました。これまでにこれを行うことができた唯一の方法は、ビューモデルのまったく新しいインスタンスを作成し、間違っていることがわかってDataContext
いるを再割り当てすることです
アップデート:
私はある程度の進歩を遂げましたが、物事は非常に奇妙になりました。アイテムの一般的なリストを持つビューモデルがあります。項目リストは、PropertyChangedEventHandler に関連付けられています。コレクション全体を新しいものに置き換えると、リストビューが更新されます。
model.Items = new List<DataItem>{ new DataItem{ Title = "new item" }};
これにより、上記のアイテムを含む 1 つのアイテム リストが生成されます。ただし、アイテムを追加しようとしても何も起こりません
model.Items.Add(new DataItem{ Title = "added item" });
また、アイテムを追加して特にPropertyChangedを起動するメソッドを作成しようとしましたが、それも機能しません
ここが変なところです。次に、このコードを試しました。
model.Items.Add(new DataItem { Title = "added item" });
model.Items = new List<DataItem> { new DataItem { Title = "new item" }};
これにより、次の 2 つの項目リストが生成されます。
- new item
- added item
どうすればいいの?コードは「1つの項目を追加」してから「リスト全体を置き換える」と言っていますが、逆の順序で実行されますか?
更新 2:
提案どおり ObservableCollection に切り替えました。これにより、元の問題が実際に解決されました。アイテムを追加できるようになり、リストに表示されます。
ただし、新しい奇妙な動作は引き続き有効です。コレクションがリセットされる前に追加されたアイテムは、新しいコレクションの末尾に追加されます。コードが逆の順序で実行されるのはなぜですか?