C# 启用委派命令
有点困惑 如果我在wpf窗口中有一个按钮并将其绑定到DelegateCommandC# 启用委派命令,c#,wpf,xaml,button,C#,Wpf,Xaml,Button,有点困惑 如果我在wpf窗口中有一个按钮并将其绑定到DelegateCommand <Button Grid.Row="1" Content="Remove" Command="{Binding CommandDelete }" /> 到目前为止,我觉得这很好,唯一缺少的是为SelectedReport的setter中的特定按钮引发CanExecute事件 CommandDelete.RaiseCanExecuteChanged(); 这是可行的,但我的问题是,如果我有10个按
<Button Grid.Row="1" Content="Remove" Command="{Binding CommandDelete }" />
到目前为止,我觉得这很好,唯一缺少的是为SelectedReport的setter中的特定按钮引发CanExecute事件
CommandDelete.RaiseCanExecuteChanged();
这是可行的,但我的问题是,如果我有10个按钮,那么每次选择一个项目时,我是否需要为每个按钮调用RaiseCanceTechChanged,或者是否以更智能的方式存在?通常我会将我的
RaiseCanceTechChanged()
放在该类的PropertyChanged
事件中
例如,如果DeleteCommand.CanExecute
基于SelectedReport
属性,我将钩住ViewModel
的PropertyChanged
事件,并在SelectedReport
更改时随时引发CanExecuteChanged
事件
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedReport")
DeleteCommand.RaiseCanExecuteChanged();
}
这将所有逻辑保持在一个中心位置,并确保每当其中一个参数更改时,都会引发CanExecuteChanged
另一种选择是从使用
DelegateCommand
切换到RelayCommand
,当属性更改时,该命令会自动提高其CanExecuteChanged
。我会假设存在性能差异,但我从未注意到。谢谢,实现了它,工作起来很有魅力。让代码保持干净一点
CommandDelete.RaiseCanExecuteChanged();
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedReport")
DeleteCommand.RaiseCanExecuteChanged();
}