0

我的视图上有一个带有简单命令绑定的按钮:

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

和虚拟机:

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

您是否检查过任何 Buttons 父母是否处于禁用状态?这也会禁用所有子控件。

附带说明:

你似乎从来没有打电话CommandManager.InvalidateRequerySuggested(),它没有在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 callingCommandManager.InvalidateRequerySuggested()` 中实现,这将建议重新查询所有已注册的命令(因为按钮 1 中的操作,可能会影响许多其他命令。

例如,可能有一个IsProcessing属性,当它的值发生更改时,您可以调用CommandManager.InvalidateRequerySuggested()以更新所有其他命令的状态。

于 2015-02-05T15:55:29.820 回答