【问题标题】:How do I create a public event for a dependency property?如何为依赖属性创建公共事件?
【发布时间】:2011-03-24 17:13:22
【问题描述】:

在下面的代码中,您可以看到我正在尝试做的事情,但它不起作用。我想要一个可以附加到用户控件之外的事件,并在依赖项属性更改时触发。

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value"
        , typeof(Double)
        , typeof(ucSlider)
        , new PropertyMetadata(50d, new PropertyChangedCallback(OnValueChanged)));

    public Double Value
    {
        get { return (Double)GetValue(ValueProperty); }
        set { SetValue(ValueProperty, value); }
    }

    public event PropertyChangedCallback OnValueChanged;

【问题讨论】:

    标签: silverlight dependency-properties


    【解决方案1】:

    依赖属性是静态的,但你的事件与类的实例相关。所以你需要一个介于静态属性和实例事件之间的中间方法。

    在本例中,我将静态方法 OnValuePropertyChanged 作为回调参数传递,并在其中引发事件:

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value"
        , typeof(Double)
        , typeof(ucSlider)
        , new PropertyMetadata(50d, new PropertyChangedCallback(OnValuePropertyChanged)));
    
    public Double Value
    {
        get { return (Double)GetValue(ValueProperty); }
        set { SetValue(ValueProperty, value); }
    }
    
    public static void OnValuePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        var sl = sender as ucSlider;
        if (sl != null)
            sl.RaiseValueChangedEvent(e);
    }
    
    private void RaiseValueChangedEvent(DependencyPropertyChangedEventArgs e)
    {
        if(this.OnValueChanged != null)
            this.OnValueChanged(this, e);
    }
    
    public event PropertyChangedCallback OnValueChanged;
    

    【讨论】:

    • 事件声明导致错误:类型“System.Windows.DependencyPropertyChangedEventArgs”不能用作泛型类型或方法“System.EventHandler”中的类型参数“TEventArgs”。没有从“System.Windows.DependencyPropertyChangedEventArgs”到“System.EventArgs”的装箱转换
    • @descf 我已经修复了错误并测试了新代码,现在它可以工作了。
    • 感谢分享高尚的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多