WPF - 自定义控件+ ICommand(我该如何实现)?

时间:2011-05-09 18:08:36

标签: wpf custom-controls routed-commands icommand

基本上,我有自定义控件FooControl

public class FooControl : ItemsControl
{
    //Code
}

我需要添加一些事件处理,但不是使用RoutedEvent,而是更喜欢使用命令。我不确定如何去做这件事。如果我想要它,以便当Bar1Property(DependencyProperty)更改时,它会引发Execute关联的execute属性。我通过.NET Reflector查看了ButtonBase代码,哇,看起来过于复杂。添加命令这个复杂吗??显然,我还必须这样做,以便我的控件启用/禁用自身的某些部分,具体取决于CanExecuteChanged是否被更改。但我猜这是另一部分。

到目前为止,这是我的OnBar1Changed函数......

    private static void OnBar1Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        FooControl element = (FooControl)obj;
        //What to do here?
    }

2 个答案:

答案 0 :(得分:4)

听起来就像你提出问题一样,你想支持自定义控件的命令(比如Button支持)。为此,我建议您查看ICommandSource的实现方式。 Microsoft会自行介绍如何自行实现它:

http://msdn.microsoft.com/en-us/library/ms748978.aspx

答案 1 :(得分:2)

在最简单的层面上,您真正需要的就是:

FooControl element = obj as FooControl;
if (element == null) return;

if (element.MyCommand != null && element.CanExecute(this.CommandParameter) 
{
  element.MyCommand.Execute(this.CommandParameter);
}

您还必须为Command和CommandParameter创建依赖项属性。

希望有所帮助,