現在、MVVM/Commands と ControlTemplates をいじっています。私がやろうとしていることは非常に簡単です。たとえば、ユーザーがそれぞれに対してアクションをトリガーできる人のリストが必要です。しかし、ボタンでリストから削除したいなどの理由で、イベント/コマンドハンドラーは人物オブジェクトではなく実行する必要があります。
これまでに行ったことは、PersonVM のリストを公開する VM を作成し、それぞれが個人オブジェクトを保持することでした。次に、個人を表示する ItemsControl を含む controltemplate を使用して CustomControl を作成しました。
すべてのデータがきれいに表示され、まったく問題ありません。
次に、ユーザーがリストから人を削除できるようにする部分を追加しようとしました。そこで、データテンプレートにボタンを追加しました。それでも問題ありません。
次のステップは、ボタンによってトリガーされるコマンドを公開することでした。
最初のアプローチは、Josh Smith の RelayCommand を使用することでした。そのため、そのうちの 1 つを PersonViewModel に追加し、ボタンにバインドしました。動作しますが、問題は、(コマンドの実行後に) 親 vm が処理しなければならないイベントを発生させる必要があることです。ますます多くのコマンドでコードが乱雑に見えるので、それは良くありません。
そのため、RoutedCommand を使用するようにすべてを作り直し、コントロール階層の上位レベルに CommandBinding を追加しようとしました。しかし、ControlTemplate ではビューモデルでメソッドを呼び出すことができないため、これは不可能です。
だから、その問題に対する正しいアプローチは何だろうと思っていますか?どういうわけか、私は間違った方向に進んでいると信じていますが、どこにあるのかわかりません。
ティア・マーティン