私はDelegateCommand
プロパティを使用してButton
のCommand
プロパティにバインドするViewModelを持っています。PRISM DelegateCommand +サンプルデータ
問題は私のサンプルデータにDelegateCommand
オブジェクトが好きではありません。それは文句を言います:The type "DelegateCommand" does not include any accessible constructors.
また、公開されている唯一のプロパティはIsActive
プロパティです。
<local:MyViewModel xmlns:local="clr-namespace:MyNamespace"
xmlns:prism="http://www.codeplex.com/prism">
<local:MyViewModel.Age>47</local:MyViewModel.Age>
<local:MyViewModel.PurchaseAlcohalCommand>
<prism:DelegateCommand IsActive="True" />
</local:MyViewModel.PurchaseAlcohalCommand>
</local:MyViewModel>
私はDelegateCommandを非公開にして、コマンドをICommandとしてキャストするための "ラッパー"プロパティを公開することを考えました。そうでなければ、ICommandの一部ではないため、 'PurchaseAlcohalCommand.RaiseCanExecuteChanged() DelegateCommandにキャストしなくても –
ああ、RelayCommandはCommandManagerクラスに依存しているので、これを使う予定はありません。 –
これは典型的に私のコマンドを公開する方法であり、この問題はサンプルデータでは見られませんでした。だから私はそれがあなたにもっと迷惑をかけるものであると思う。一般的に、あなたが見つけた問題のために、他の人がICommandを実装するのを避けます。コマンドオブジェクトに状態を更新するように指示するのは難しいです。オブジェクト指向設計の原則(具体的にはカプセル化)に続いて、コマンド自体はいつ更新すべきかを知っている必要があります。更新するように伝える必要はありません。 –