Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用一个CanExecute选择性地禁用控件数组中的元素_C#_Wpf - Fatal编程技术网

C# 使用一个CanExecute选择性地禁用控件数组中的元素

C# 使用一个CanExecute选择性地禁用控件数组中的元素,c#,wpf,C#,Wpf,我有一个WPF界面,其中有许多(超过40个)按钮执行类似的任务,这些任务通过按钮名称参数化,我链接到一个命令。在我的命令处理程序中,我有一些工具来确定40个按钮中的哪一个被点击了。问题是如何根据运行时条件有选择地禁用或启用其中一些命令。有人担心,一个CanExecute方法将应用于不同的组件,并基于e进行区分。源标识将不起作用。如果执行逻辑不同,我看不出有任何理由将所有按钮绑定到同一个命令 我真的希望看到命令分开,而不是一个包含所有按钮名称的大if-else块。测试表明,使用以下方式构造的Can

我有一个WPF界面,其中有许多(超过40个)按钮执行类似的任务,这些任务通过按钮名称参数化,我链接到一个命令。在我的命令处理程序中,我有一些工具来确定40个按钮中的哪一个被点击了。问题是如何根据运行时条件有选择地禁用或启用其中一些命令。有人担心,一个CanExecute方法将应用于不同的组件,并基于e进行区分。源标识将不起作用。

如果执行逻辑不同,我看不出有任何理由将所有按钮绑定到同一个命令


我真的希望看到命令分开,而不是一个包含所有按钮名称的大if-else块。测试表明,使用以下方式构造的CanExecute方法可以实现这一点:

private void MyCommandCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    if (e.Source == button1)
        e.CanExecute = checkBox1.IsChecked.HasValue ? checkBox1.IsChecked.Value : false;
    if (e.Source == button2)
        e.CanExecute = checkBox2.IsChecked.HasValue ? checkBox2.IsChecked.Value : false;
    if (e.Source == button3)
        e.CanExecute = checkBox3.IsChecked.HasValue ? checkBox3.IsChecked.Value : false;
}

到底是什么不起作用,是
e.Source
没有包含正确的按钮,还是
CanExecute
方法没有调用?@bitbonk我很难重现问题,因此我将尝试关闭此问题。我认为没有问题。我关心的是,编写40个if语句比40个具有CanExecute签名的单独方法更简短、更易于阅读和维护。按钮是否做了不同的事情?您会为每个按钮编写if块吗?是的,按钮是静态的,并且执行几乎相同的操作,向服务器发送包含不同字节的消息。可能不是您的日常用户场景。我同意,如果这些按钮做的事情完全不同(而且逻辑性也很强),那么最好使用单独的命令。我可以这样做,但在这种情况下,它不允许我保存任何输入。每个“按钮”仍然具有唯一的标识。