2

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

public class FooControl : ItemsControl
{
    //Code
}

我需要添加一些事件处理,但比起使用 RoutedEvent,我更喜欢使用 Commanding。不过,我不确定该怎么做。如果我想要它,以便当 Bar1Property (DependencyProperty) 发生更改时,它会引发 Execute 关联的执行属性。我通过 .NET Reflector 查看了 ButtonBase 代码,哇,这看起来太复杂了。添加命令这么复杂吗?显然,我还必须这样做,以便我的控件根据 CanExecuteChanged 是否更改来启用/禁用自身的某些部分。但我想那是另一部分。

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

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

2 回答 2

4

听起来您问问题的方式是,您希望在自定义控件中支持命令(例如 Button 支持)。为此,我建议您查看 ICommandSource 是如何实现的。Microsoft 对如何自己实现它进行了很好的介绍:

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

于 2011-05-09T19:29:47.850 回答
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 创建依赖属性。

希望有帮助,

于 2011-05-09T18:47:28.643 回答