这是我的问题。我最近创建了一个自定义控件,效果很好。 但是当我使用它时我遇到了问题,我有一点问题:
在我的控制中,我创建了一个名为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属性的值。
编辑:问题很简单,如何删除该默认值并直接打印绑定属性?
答案 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
)属性的合适位置。