自定义WPF控件上的默认值

时间:2013-01-02 20:03:30

标签: c# wpf custom-controls dependency-properties

这是我的问题。我最近创建了一个自定义控件,效果很好。 但是当我使用它时我遇到了问题,我有一点问题:

在我的控制中,我创建了一个名为Value的属性,定义如下:

 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown), new PropertyMetadata(1000));
    public int Value
    {
        get
        {
            return (int)GetValue(ValueProperty);
        }
        set
        {
            SetValue(ValueProperty, value);
            this.ValueText.Text = value.ToString();
        }
    }

当我对此值进行数据绑定时,绑定有效,但默认值设置为1000,因此它首先打印1000.但实际上,绑定到Value的属性不等于1000。 我想在创建Value属性时在ValueText.Text中打印bound属性的值。

编辑:问题很简单,如何删除该默认值并直接打印绑定属性?

2 个答案:

答案 0 :(得分:1)

您应该能够在DependancyProperties元数据中设置PropertyChanged事件,以便在ValueText更改时更新Value

这样的事情:

public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
    new PropertyMetadata(1000, (sender, e) => (sender as NumericUpDown).ValueText.Text = e.NewValue.ToString()));

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

答案 1 :(得分:0)

当通过WPF的数据绑定更改内容时,不会调用属性setter,因此这种方法不起作用。

默认的初始值始终为1000,但数据绑定可能会覆盖它。您需要添加Callback以在依赖项属性值更改时适当地通知您。

有关详细信息,请参阅Dependency Property Callbacks页面,了解如何正确实现属性更改回调。这是设置其他(ValueText)属性的合适位置。