1

プロパティを使用してのDelegateCommandプロパティにバインドするViewModel があります。ButtonCommand

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>
4

2 に答える 2

1

ビュー モデルを変更して、DelegateCommand ではなく ICommand を公開します。DelegateCommand は ICommand の単なる実装です。後で MvvmLight から RelayCommand に切り替えたい場合は、ビューとサンプル データを気にする必要はありません。

これで問題が解決するかどうかはわかりませんが、解決する可能性があると思います。さらに、それは優れたプログラミングの実践にすぎません。

于 2011-12-01T18:34:22.813 に答える
1

あなたのDelegateCommand設定方法では、アクティブ化されても何もしません。それが望ましい動作である場合、私の提案は単にそれを宣言しないことです。WPF は、null ICommandオブジェクトへのバインドを適切に処理します。

または、インスタンス化された DelegateCommand にバインドする必要がある場合は、サブクラス化DelegateCommandしてパラメーターなしのコンストラクターを含めることができます。

それを a にバインドし、コマンドがトリガーされたときに実際に何かDelegateCommandを実行したい場合、それはもう少し複雑になります。前述のサブクラスを使用する必要がありますが、XAML でデリゲートを定義できる必要もあります。そこにサンプルがあると思いますが、それらにはマークアップ拡張などのものが含まれていると思います。このアプローチでの投資収益率は少し低いかもしれませんが、マイレージはさまざまです。DelegateCommandDelegateCommand

これが通常処理される方法である最後の代替手段: DelegateCommands ViewModel のコンストラクターで your を定義します。

于 2011-12-07T16:52:55.440 に答える