wpf更改事件前的依赖属性?

时间:2010-07-28 11:40:55

标签: c# wpf wpf-controls

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

现在是否有一个事件在更改值之前被引发?

我知道在属性发生变化后会引发OnPropertyChanged。

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

我无法将依赖属性设置回旧值,因为这意味着我在控件中丢失了状态。

谢谢!

3 个答案:

答案 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);
   }
}

此外,您PropertyChangedCallbackValidateValueCallbackCoerceValueCallback代表也会有所帮助。