使用WPF中的命令实现自定义CanExecuteChanged事件

时间:2010-04-06 08:15:10

标签: wpf button command

我尝试为命令按钮执行自定义CanExecuteChanged事件。在CanExecuteChanged事件中,我想在canExecute值改变时做一些事情,但我不想通过实现自定义命令按钮类(从Button和实现ICommandSource派生)来做。我也不想把我的东西放进CanExecute方法。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以处理命令的CanExecuteChanged事件

答案 1 :(得分:0)

例如:

在XAML中

<Page  xmlns:local="clr-namespace:MySolution" ....>
 <Page.CommandBindings>
    <CommandBinding Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}"
               Executed="MyCmdBinding_Executed"
               CanExecute="MyCmdBinding_CanExecute"/>
 </Page.CommandBindings>

  ...

 <Button Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}" ... />

  ...

</Page>

在页面代码后面:

namespace MyNameSpace
{

public partial class MyClass : Page
{

    ...

    public static RoutedCommand MyRCmd = new RoutedCommand();

    public event EventHandler CanExecuteChanged;

    private void CanExecuteChanged(object sender, EventArgs e) 
    { 
      // Here is my problem: How to say to execute this when CanExecute value is
      // changing? I would like to execute this on CanExecute value changed.
      // I think somewhere I can tell compiler the handler for CanExecutedChanged is 
      // this. How to?
    } 

    private void MyCmdBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        // Do my stuff when CanExecute is true
    }

    private void MyCmdBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        if (....)
        {
            e.CanExecute = true;
        }
        else
        {
            e.CanExecute = false;                
        }
    }

    ...

} // end class

} // end namespace

我的问题是怎么说编译器:嘿,关于CanExecute值改变了你必须调用并把这些东西做成CanExecuteChanged方法。

非常感谢。