如何使用不同的CommandParame强制多次调用RaiseCanExecuteChanged

时间:2015-04-21 18:48:29

标签: wpf xaml relaycommand

我有一个带有两个按钮的页面(我真的有十个,但是例如,可以说两个),它们都绑定到一个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?

非常感谢。

2 个答案:

答案 0 :(得分:1)

有趣的是,对于技巧,我试图解雇

CopyPasteDataValueCommand.RaiseCanExecuteChanged();

并在CanExecute方法中放置一个断点.....并且低,看哪!它每次我想要它发射时都会触发它,传入CommandParameter!哇!超强!

因此,看起来有一些类型的内部数组\ list跟踪CommandParameters并触发ONE RaiseCanExcecuteChanged方法.....为我激发所有其他相关联的方法。甜!

答案 1 :(得分:-1)

在DataGrid上为SelectionChanged事件实现事件处理程序。

在事件处理程序中调用viewmodel的逻辑以进行以下操作:

CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("AccountID");
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("CustomerID");