我有一个带有两个按钮的页面(我真的有十个,但是例如,可以说两个),它们都绑定到一个RelayCommand,每个都有一个CommandParameter绑定到数据库中的两个不同的列。像这样的东西,
<Button Command="{Binding DataContext.CopyPasteDataValueCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding AccountID}">
<Button Command="{Binding DataContext.CopyPasteDataValueCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding CustomerID}">
我在后面的代码中正确设置了相关的RelayCommands,一切正常。除非我在DataGrid中选择不同的行,并且我想强制重新绑定并调用这两个按钮的RaiseCanExecute。
我想做这样的事情
private void RaiseAllCanExecuteChanged(){
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("AccountID");
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("CustomerID");
}
当然这不会编译。但是我想知道如何做到这一点,或者如果我确实能做到这一点。这是可能的还是我真的需要为每次出现多个RelayCommands?
非常感谢。
答案 0 :(得分:1)
有趣的是,对于技巧,我试图解雇
CopyPasteDataValueCommand.RaiseCanExecuteChanged();
并在CanExecute方法中放置一个断点.....并且低,看哪!它每次我想要它发射时都会触发它,传入CommandParameter!哇!超强!
因此,看起来有一些类型的内部数组\ list跟踪CommandParameters并触发ONE RaiseCanExcecuteChanged方法.....为我激发所有其他相关联的方法。甜!
答案 1 :(得分:-1)
在DataGrid上为SelectionChanged事件实现事件处理程序。
在事件处理程序中调用viewmodel的逻辑以进行以下操作:
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("AccountID");
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("CustomerID");