要更改的原始WPF属性更改事件

要更改的原始WPF属性更改事件,wpf,Wpf,我对WPF不熟悉,我会将其拼接在一起,但有一个属性更改事件附加到字段,我正在使用它来了解什么时候发生了更改,关闭这些事件是一种了解值是否发生了更改的方法,然后与原始值来回地不同,现在,我有一组默认值,我正在检查这些默认值,以了解是否发生了变化,并且当我必须重新分配默认值时,属性事件会不断被触发,通常会有一个用于这些公共属性的支持私有字段,在这些字段中,您已调用Raise或ONPROPERTYCHANGE(无论您如何操作)。您通常可以在设置输入值之前将输入值与支持字段进行比较。因此,可以在属性设置

我对WPF不熟悉,我会将其拼接在一起,但有一个属性更改事件附加到字段,我正在使用它来了解什么时候发生了更改,关闭这些事件是一种了解值是否发生了更改的方法,然后与原始值来回地不同,现在,我有一组默认值,我正在检查这些默认值,以了解是否发生了变化,并且当我必须重新分配默认值时,属性事件会不断被触发,通常会有一个用于这些公共属性的支持私有字段,在这些字段中,您已调用Raise或ONPROPERTYCHANGE(无论您如何操作)。您通常可以在设置输入值之前将输入值与支持字段进行比较。因此,可以在属性设置器中对输入值与设置前字段的值进行任何类型的比较。 像这样的

private bool bMyBool;
public bool MyBool
{
     get
     {
         return bMyBool;
     }
     set
     {
         // Can do comparison here
         // if (value == bMyBool)
         //     DoSomething
         bMyBool = value;
         OnPropertyChanged("MyBool"); // Or some type on property changed notification
     }
}

如果您不想更改该值,那么只需删除get

private string myValue = "default";
public string MyValue;
{
   get { return myValue; }
   set 
   {
      if (myValue == value) return;
      myValue = value;
      NotifyPropertyChanged(MyValue);
   }
}
如果要更改值但不更改NotifyPropertyChanged,则可以指定

myValue = "no notitfy";

很少您会想这样做

您是在公共属性中使用Raise或OnPropertyChanged来支持私有字段的公共属性?还是在通过xaml连接的属性更改事件处理程序中?这是一个模糊的问题,没有看到实际代码。调用属性更改(对于INPC)没有备份值的更改通常是不好的,因为这将触发不必要的刷新(在大多数情况下)在UI中,如果它被绑定。因此,在MVVM和VM的几乎所有属性中,如果它们触发INPC事件,则属性可能已更改。但是,在没有看到代码的情况下,这一切都不是保证,因为在某些情况下,即使值没有更改,您也可能希望触发属性更改。我使用raise和on来谈论公共属性属性更改是一种拥有默认值的方法,可以知道某个情况下某个内容是否已更改,然后再更改回其原始状态。是的,但您需要的比较取决于具体情况。从我的回答中可以看出,您可以检查“值”的值vs支持字段。如果属性真的更改了,您只需要调用OnPropertyChanged。您可以使用属性的设置程序检查任何条件,然后根据条件设置支持字段并调用OnPropertyChanged。如果不需要,为什么要将值更改回原始值如果你不想换,那就别买了。