私はこのウェブとグーグルを見ましたが、解決策はうまくいきませんでした。
UserControl の ViewModel にコマンドがあります。さて、ユーザー コントロールには、ObservableCollection にバインドされた ItemsControl があります。ItemsControl.ItemTemplate の DataTemplate 内にボタンがあり、コマンドを使用したいと考えています。DataTemplate 内では、datacontext は ViewModel ではなく ObservableCollection のアイテムであるため、コマンドをバインドできません。
問題は次のとおりです。親データコンテキストが失われた場合、ボタンをコマンドにバインドするにはどうすればよいですか?
これはよくある問題だと思うので、簡単な解決策が必要だと思います。
このシナリオを想像してみてください:
ItemsSource として observableCollection を持つ ListBox 項目があるため、コレクション内のすべての要素に対して ListBox 内でデータ テンプレートを使用しています。さて、選択したアイテムを削除したいので、そのジョブのすべての行にボタンを配置します。¿あなたはそれをどのようにしますか?
MVP では、ボタンのクリック イベントでこれを行うことができます。
Button but = e.Source as Button;
if (but != null)
Presenter.ActualNote = but.DataContext as Note;
要するに。行 (選択した項目) のデータ コンテキストをプレゼンターに送信します。
しかし、どうすればmvvmの方法でそれを行うことができますか? コマンドを使用する必要がありますが、ボタンは ViewModel (コマンドが存在する場所) について何も知らないため、コマンドをボタンに割り当てることができません。
ご覧のとおり、ボタンは datatemplate 内に存在する必要があり、datacontext はもはや ViewModel ではありません.... コマンドにアクセスするために、親の DataContext にアクセスする必要があるのはそのためです。
あなたが私の問題をよりよく理解してくれることを願っています。
ありがとうございました。