我在控件上有一个依赖属性,它是一个自定义类。
现在是否有一个事件在更改值之前被引发?
我知道在属性发生变化后会引发OnPropertyChanged。
之前我需要一些事件,以便我可以取消更改....以保持控件的状态。
我无法将依赖属性设置回旧值,因为这意味着我在控件中丢失了状态。
谢谢!
答案 0 :(得分:6)
如果是您的DependencyProperty
,您可以使用ValidateValueCallback验证传入的值并拒绝它,如果它不是您想要的。
在以下示例中,只接受大于0的值:
public int Test {
get { return (int)GetValue(TestProperty); }
set { SetValue(TestProperty, value); }
}
public static readonly DependencyProperty TestProperty =
DependencyProperty.Register("Test", typeof(int), typeof(YourClass),
new UIPropertyMetadata(0), delegate(object v) {
return ((int)v) > 0; // Here you can check the value set to the dp
});
答案 1 :(得分:1)
如果您的数据对象实现了INotifyPropertyChanging,那么您可以处理在属性值更改之前引发的PropertyChanging事件。
在.NET 3.5中引入了INotifyPropertyChanging
答案 2 :(得分:-1)
您可以在属性声明集部分中检查属性的值。假设我们有CustomColor dep属性:
public Color CustomColor
{
get { return GetValue(CustomColorProperty) as Color;}
set
{
//check value before setting
SetValue(CustomColorProperty, value);
}
}
此外,您PropertyChangedCallback,ValidateValueCallback,CoerceValueCallback代表也会有所帮助。