WPF依赖属性更改前事件?

3

我在一个控件上有一个依赖属性,它是一个自定义类。

现在有没有在值被改变之前触发的事件?

我知道OnPropertyChanged是在属性已经更改后触发的。

我需要一些在之前触发的事件,以便我可以取消更改......以保留控件的状态。

我不能将依赖属性设置回其旧值,因为这意味着我会失去控件的状态。

谢谢!

3个回答

8

如果是你的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
如果您的数据对象实现了INotifyPropertyChanging接口,那么您可以处理在属性值更改之前引发的PropertyChanging事件。
INotifyPropertyChanging是在.NET 3.5中引入的。

谢谢大家的回复! - guest

-1
您可以在属性声明设置部分检查属性值。假设我们有CustomColor dep属性:
public Color CustomColor
{
   get { return GetValue(CustomColorProperty) as Color;}

   set 
   { 
      //check value before setting
      SetValue(CustomColorProperty, value);
   }
}

同时,PropertyChangedCallbackValidateValueCallbackCoerceValueCallback 这些委托对您也会很有帮助。


7
不推荐在属性依赖项的获取器/设置器中放置任何逻辑,因为绑定引擎实际上并不使用它们。 - HaxElit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接