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

时间:2012-11-30 10:43:49

标签: c# wpf

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

2 个答案:

答案 0 :(得分:1)

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

我真的希望看到命令分开,而不是一个带有所有按钮名称的大if if块

答案 1 :(得分:0)

测试表明,使用以下列方式构建的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;
}