silverlight - 如何为依赖属性创建公共(public)事件?

标签 silverlight dependency-properties

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

    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;

最佳答案

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

在此示例中,我将静态方法 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;

关于silverlight - 如何为依赖属性创建公共(public)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422914/

相关文章:

silverlight - Windows Phone 8.1和Windows Phone Silverlight 8.1之间的区别

C# Silverlight Datagrid - 行颜色更改

c# - 客户端 HttpWebRequest : ArgumentNullException s

c# - 基于 DependencyProperty 控制样式

c# - 在 C# WPF 中创建可绑定(bind)点

c# - 将属性注册为 DependencyProperty

silverlight - 带有 ItemTemplate : SelectionChanged not fired 的列表框

c# - 有没有办法控制 Dependency Property Binding 顺序值的更新?

wpf - 不继承依赖属性值

c# - 银光 4 : Converting image into byte[]