如何绑定按钮来控制

时间:2015-02-25 13:58:28

标签: c# wpf mvvm

我是WPF的新手。我的主窗口上有一个按钮

<Button Grid.Row="1" x:Name="btnSelect" Command="{Binding SaveCommand}"   
      Content="Select" 
     IsEnabled="{Binding CanExec,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 

和myViewModel

    private bool _canExecute;
    private ICommand saveCommand;
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
          CreateSaveCommand();

    }
   private void CreateSaveCommand()
    {
        this.saveCommand = new DelegateCommand<object>(this.OnSaveClick,    this.CanSaveExecute);
    }
    public ICommand SaveCommand
    {
        get { return this.saveCommand; }
    }
    private void OnSaveClick(object arg)
    {


    }
    private bool CanSaveExecute(object arg)
    {
        return CanExec;

    }

    public bool CanExec
    {

        get { return _canExecute; }
        set { _canExecute = value; OnPropertyChanged("CanExec"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string p)
    {
        if (PropertyChanged == null)
            PropertyChanged(this, new PropertyChangedEventArgs(p));
    }

但按钮始终处于禁用状态。我错过了什么?

2 个答案:

答案 0 :(得分:1)

您的问题出现在OnPropertyChanged方法的实施中......目前,只有{em> {em>} 才会被称为,当然,导致null。试试这个:

Exception

更新&gt;&gt;&gt;

您的private void OnPropertyChanged(string p) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(p)); } 也不正确,但这不会阻止它工作......它应该是这样的:

Binding Path

请注意,<Button Grid.Row="1" x:Name="btnSelect" Command="{Binding SaveCommand}" Content="Select" /> not 必须手动设置为ICommand.CanExecute属性...框架将为我们执行此操作。

答案 1 :(得分:-1)

Bool的默认值为'False',因此您的CanExec返回'False'并且您的按钮被禁用。