ObservableCollection<T>型のプロパティの値が変更した事を知りたい。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーObservableCollection<T>型のプロパティの値が変更した事を知りたい。6,378件0ご教授よろしくお願いします。MyViewModelクラスはObservableCollection型のプロパティを持つModel-Aがあります。Model-AはSumというプロパティがあります。これはModel-BがもつNumberプロパティの合計です。質問内容はModel-BのNumberが変わった時、もしくはObservableCollectionの数が変わった時にModel-AのSumの値の画面上に表示させたいのですが、更新されません。どなたかご教授よろしくお願いします。ソースは以下の通りです。(*ViewModelBaseクラスはINotifyを実装しています。票1WPFデータバインドに値の変更を認識させるためには、Sumプロパティの値が変わったタイミングでPropertyChangedイベントを発生させる必要があります。イベントを発生させる方針としてはModel-Aから汎用のイベントを観測する方法と、Model-Bから明示的に値を更新する方法が考えられます。前者の場合、まずModelBCollectionのセッターでCollectionChangedイベントハンドラーを設定します。}}Modelbcollection_CollectionChangedの発生時にはSumの変更通知と、各要素のNumberプロパティの変更を監視しなければなりません。各要素にイベントハンドラーを設定する。OnPropertyChanged(nameof(Sum));}Item_PropertyChangedではe.PropertyNameを判定し、NumberであればSumの変更を通知します。}}この方法は要素が変更不能な型であっても使用できますが、CollectionChanged周りが煩雑になりますので変えられるのであればModel-BにModel-Aの参照を持たせて変更時に何らかのメソッドを呼ばせる形の方が簡潔です。Model-Aに通知用メソッドを用意します。}}ModelbCollectionには専用の型を使用し、各メソッドをオーバーライドします。}}この型はModelbCollectionのゲッターで使用します。}}上記でModel-BのOwnerが設定されているので、プロパティの変更時にメソッドを読んでやります。個の銅バッジご回答ありがとうございます。Owener{get;set;}のプロパテイはOwnerが常にnullなのでOwner.NotifySumChange();がnullExceptionを出してしまいます。解決策はありますでしょうか。コレクションを定義しただけで使用していないのでは。Model-Bがコレクションにアタッチされる前に操作されて例外が出るのであれば、Ownerがnullでも動作するように変更してください。4:39おっしゃる通りCollectionを定義しただけで使用していないのが原因でした。ありがとうございます。ちなみにModelAをUIにバインドすれば正しく値が更新できたのは確認できました。それはVIew-ModelがバインドされているのでMVVMに反する形になってないか心配です。プロパティの変更通知は実際に値が変わったインスタンスでだけ発生させれば問題ないです。MVVMの教条的な話をするつもりはありませんが、VMが不要であればVとMを直接バインドするのは一般的だと思いますし、質問内容に関係なく元からそのような設計になっているのでは。M→VMの参照は邪道ですので、気になるのならすべてVMでラップしてください。7:35返信ありがとうございます。M→VMの参照にだけは気をつけます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。開催しました!🎉コメントで回答する理由を教えてくださいリンク集1MultiBindingのソースの更新を行ったとき、直後にViewの更新が行われない関連する質問1ボタンのNameプロパティを受け取りたい1XAMLでバインドされているプロパティのPropertyInfoを取得したい3C#のインターフェースについて0GridViewのデータバインディングが反映されない0選択されたRadioButtonによって、ViewModelのプロパティ値を変更したい。プロパティを初期化したい1MultiBindingのソースの更新を行ったとき、直後にViewの更新が行われない0C#の自作プロパティがデザイナのプロパティウィンドウに表示されない。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。