ファイルの内容に応じてボタンを動的に生成しています。lambdaのRelayCommandは一度だけ実行する
私はこの方法でそれを書く場合私のコードは一度だけRelayCommandを実行します。
var button = new Button();
button.Command = new RelayCommand(() => Messenger.Default.Send(new UseThisValue(value));
// button gets added to a treeview
が、ラムダは、タグproperyに設定されているように私はそれを変更した場合、それは
var button = new Button();
button.Tag = new Action(() => Messenger.Default.Send(new UseThisValue(value));
button.Command = new RelayCommand(button.Tag as Action);
// button gets added to a treeview
たびに動作します
ここでは何が起こっていますか?アサインメントはいくつかの参照カウントを生かしたままにしていますか?私はC#をかなり新しくしているので、経験豊かな開発者には明白な何かを見落としているかもしれません。
mvvmでは、コマンドはユーザインタフェースについて何も知らないはずです。コマンドはビューモデルを定義する必要があります。ビューモデルは、ビューを知っているか気にするものではありません。ビューで、バインディングを使用してボタンのコマンドを設定します。 –