0

ビューに単純なコマンド バインドを持つボタンがあります。

<Window ...>
    <Window.DataContext>
        <vm:ShellViewModel />
    </Window.DataContext> 
    ...
    <Button Command="{Binding DoSomethingCoolCommand}" Content="Execute" />

そして、vm:

public class ShellViewModel : ObservableObject {

    private RelayCommand _doSomethingCoolCommand;

    public ICommand DoSomethingCoolCommand {
        get {
            return _doSomethingCoolCommand ??
                (_doSomethingCoolCommand = new RelayCommand(DoSomethingCool));
        }
    }

    private void DoSomethingCool() { ... }

ただし、アプリケーション/ビューの起動時にボタンが無効になり、有効にできません。コマンド実行評価をに渡し、ビューにRelayCommandも設定しようとしました。IsEnabled何か不足していますか?


編集

RelayCommand と ObservableObject は、タグに示されているように、 mvvm 財団プロジェクトからのものです。リンク: https://mvvmfoundation.codeplex.com

4

1 に答える 1

0

ボタンの親のいずれかの状態が無効になっているかどうかを確認しましたか? これにより、すべての子コントロールも無効になります。

余談ですが:

呼び出すことはないようで、登録されているすべてのコマンドの再クエリを提案する CommandManager.InvalidateRequerySuggested()` にCommandManager.InvalidateRequerySuggested()は実装されていません(ボタン 1 のアクションは他の多くのコマンドに影響を与える可能性があるためです。RelayCommand´ class, just the registration of events, as seen [here][1]. ICommand or RelayCommand never does invalidate update it's state by default. You got to do this. Either by calling

たとえば、プロパティがあり、その値が変更されたときに、他のすべてのコマンドの状態を更新するためにIsProcessing呼び出すことができます。CommandManager.InvalidateRequerySuggested()

于 2015-02-05T15:55:29.820 に答える