我是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));
}
但按钮始终处于禁用状态。我错过了什么?
答案 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'并且您的按钮被禁用。