私はMVVMパターンに基づいてWPFアプリケーションを持っています。それは左側に木があり、右側に細部があります。ツリーにはさまざまなタイプのオブジェクトが含まれており、それぞれのタイプのビューモデルがあります。ビューでは、各ビューモデルタイプに対して異なるデータテンプレート(ユーザーコントロールを含む)があります。現在の詳細ビューに基づくデータバインディングを介してビューが選択されます。WPF MVVM:ViewModelが変更されたときにビューが再ロードされない
ツリーノードを切り替えると、ノードごとに新しい詳細ビューモデルがインスタンス化され、ビューもそれに応じて変更され、DataContextChangedイベントとLoadedイベントの両方が発生します。つまり、私は同じタイプのオブジェクトを切り替えるまでです。ここでも、詳細ビューモデルは更新されますが、ビューインスタンスは同じままです。つまり、DataContextChangedイベントのみが起動されますが、Loadedイベントは起動されません。
Loadedイベントを強制的に発生させる方法はありますか?たとえば、ビューを再初期化するなどですか?
Loadedイベントが必要なのは、データバインディング時にWPFが入力コントロールの選択変更イベントを発生させ、ユーザーがトリガされた選択変更イベントに作用するロジックがあるため、トリガーされたイベントを無視できるようにする必要があるためですデータバインディングによって。今のところ、Loadedイベントはこれを行うための最善の選択肢のようです。記載されている問題がある。
おかげで、それはデータコンテキストが変更するたびに実行する必要がある場合は、DataContextChangedハンドラにロードハンドラを持っているものは何でもロジックマイケル
SelectionChangedイベントが必要な場合は、私には良くないデザインのように聞こえるので、選択したアイテムに直接詳細ビューをバインドすることができます。特に、選択の変更をバインドするために異なる動作が必要であるという事実は、むしろ怪しいです。それだけでなく、問題の簡略化されたコードを投稿するのが役に立ちます。 –
上記の問題を再現するコードを投稿してください。 –
答えをありがとう。サンプルアプリケーションがこれをよりよく強調表示するようになりました。残念ながら(私のために)私は一緒に1つを置くことができる日の数日前になります。ああ、サンプルを含むファイルをどのように添付できますか? – Michael