wpf 将委托绑定到DependencyProperty的正确方法?

rqmkfv5c  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(98)

我有下面的UserControl,试图接受用户提供的Validation函数。代码“似乎”是罚款,设计师没有抱怨,编译罚款,应用程序运行..但回调永远不会触发有Maven能指出我还缺少什么吗?

namespace MyNamespace
{
    [Category("Behavior")]
    public delegate bool FlowValidationEvent(FlowStep currentStep);
    public partial class FlowStep : UserControl
    {   
        public event FlowValidationEvent Validation;
        public static readonly DependencyProperty ValidationProperty = 
            DependencyProperty.Register(
                nameof(Validation),
                typeof(FlowValidationEvent),
                typeof(FlowStep),
                new FrameworkPropertyMetadata(null)
            );

        public bool Validate()
        {
            if (Validation!= null)
                return Validation.Invoke(this);
            return true;
        }

        public FlowStep()
        {
            InitializeComponent();
        }
    }
}

在消费者控件级别,我创建了一个虚拟验证函数,并通过XAML传递它:

public bool Step1_Validation(FlowStep currentStep)
{
    Log.Debug("CALL ME BABE!");
}

它甚至能够看到它,甚至在XAML设计器中建议,所以我认为在DependencyProperty级别,它似乎很好(XAML设计器理解它)?

当启动时,我检查元素,不出所料,Validation属性甚至没有显示在我的对象中。

当我实际触发“Next”按钮并尝试调用Validate函数时,eventnull.

fgw7neuy

fgw7neuy1#

实际上,我是在复杂的事情。对于event,我不需要将其注册为DependencyProperty,简单的声明就可以工作。我所需要的是以下内容,我的代码的其余部分按预期工作:

public event FlowValidationEvent Validation;

需要注意的一点是,尽管在我的类中声明了事件属性Validation,但我们仍然不会在运行时的构造函数中看到它(奇怪)。

相关问题