わかりました。これを説明するのは少し難しいので、WPFでMVVMモデルを使用してプログラムを作成しています。
メインのUserControlにグリッドがあり、コードを介して動的に子を更新する必要があります(更新することで、作成および破棄することを意味します)(データはViewModelによって変更されるため、グリッドの子を必要に応じて作成および破棄する必要があります) 。
XAMLのみを使用してUIElementsを動的に作成および破棄することはできないと確信しているので、ビューに更新関数があります(これらの更新関数は、UI自体を更新するだけで、ViewModelの何も変更しないため、MVVMを壊すことはありません。ビューは、ViewModelのデータに基づいてUIを変更するだけなので、大丈夫ですか?)
現在、ビュー内でViewModelのPropertyChangedイベントを割り当て、コードを介してそれをキャッチし、Updateイベントを発生させているため、Viewクラスのイベントは次のようになります。
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "BoardWidth" || e.PropertyName == "BoardHeight")
RecreateBoard();
if (e.PropertyName == "Coordinates")
UpdateCoordinates();
if (e.PropertyName == "TilesOnly")
{
UpdateBoardBlocks();
UpdateTiles();
}
if (e.PropertyName == "BoardBlockViewModels")
UpdateBoardBlocks();
if (e.PropertyName == "TileViewModels")
UpdateTiles();
if (e.PropertyName == "EntryPoint" | e.PropertyName == "CursorViewModel")
UpdateEntryPoint();
}
更新イベントは、ViewModelのデータに基づくコードを使用して、ビューのメイングリッド内に子を作成/破棄します。この現在の実装はうまく機能します。
ただし、XAMLを介してイベントハンドラーを実装したいと思います。したがって、私の質問は、上記のイベントハンドラーコードをXAMLに実装する方法です。データコンテキストプロパティが変更されたときに、ビュー内でメソッドを実行する方法が見つかりません。DataTriggersを調べましたが、メソッドを実行する機能が含まれていません。また、DataTriggerは、特定の値に設定されているときではなく、プロパティが変更されたときに起動する必要があります。
これは厳密にはビューモデル自体とは関係のないビューであるため、ビューモデルを介して更新をプッシュしたくありません。例えば。このような状況では、ビューの別の実装を更新する必要がない場合があります。ViewModelを介してそれをプッシュしたとしても、ビュー自体には、メソッドの実行方法に関して同じ問題があります。
ご協力ありがとうございました。