Wpf 如何使用不同的CommandParameters强制多个调用RaiseCanExecuteChanged

Wpf 如何使用不同的CommandParameters强制多个调用RaiseCanExecuteChanged,wpf,xaml,relaycommand,Wpf,Xaml,Relaycommand,我有一个有两个按钮的页面(我确实有十个按钮,但为了方便起见,让我们说两个),它们都绑定到一个RelayCommand,每个按钮都有一个CommandParameter绑定到数据库中的两个不同列。像这样的, <Button Command="{Binding DataContext.CopyPasteDataValueCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"

我有一个有两个按钮的页面(我确实有十个按钮,但为了方便起见,让我们说两个),它们都绑定到一个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中选择了另一行,并且我想强制重新绑定和调用这两个按钮的RaiseCanecute

我想做这样的东西

private void RaiseAllCanExecuteChanged(){
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("AccountID");
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("CustomerID");
}
private void raisealcancecutechanged(){
CopyPasteDataValueCommand.RaiseCanExecuteChanged(“AccountID”);
CopyPasteDataValueCommand.RaiseCanExecuteChanged(“CustomerID”);
}
当然,这不会被编译。但我想知道我该怎么做,或者如果我真的能做到的话。这是可能的还是我真的需要为每次事件使用多个RelayCommand


非常感谢。

有趣的是,为了耍花招,我只是试着开了枪

CopyPasteDataValueCommand.RaiseCanExecuteChanged();
并在CanExecute方法中设置一个断点….然后再低一点!!!!每次我想要它开火时,它都会开火,并传入CommandParameter!哇!太好了


因此,似乎有某种类型的内部数组\list正在跟踪CommandParameters并启动ONE RaiseCanceCuteChanged方法……为我启动所有其他关联的方法。好极了

在数据网格上为SelectionChanged事件实现一个事件处理程序。

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

CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("AccountID");
CopyPasteDataValueCommand.RaiseCanExecuteChanged<string>("CustomerID");
copypestedatavaluecommand.raisecancecutechanged(“AccountID”);
CopyPasteDataValueCommand.RaiseCanExecuteChanged(“CustomerID”);

谢谢您的回复。我确实做了事件处理程序,不幸的是,您那里的代码是我上面代码的副本\粘贴,不幸的是,它没有编译,因为RaiseCanceTechChanged当前是一个空参数方法,也不是泛型方法。但我找到了一个解决办法,比我原来想象的要简单得多。我想得太多了,我只需要打电话给RaiseCanceTechChanged…系统会为我处理其余的事情(即打个人电话)。