RaisePropertyChanged和OnPropertyChanged的区别
WPF中,数据绑定是实现MVVM模式的关键。在数据绑定的过程中,我们需要在数据发生变化时及时通知UI更新。为了实现这个功能,WPF提供了两个重要的方法:WPFRaisePropertyChanged和OnPropertyChanged。
WPFRaisePropertyChanged是一种手动触发属性更改事件的方法。当属性的值发生变化时,我们需要调用此方法通知UI更新。在ViewModel中使用此方法时,我们需要传递属性的名称作为参数。例如:
private string _name;
public string Name
{get { return _name; }set{if (_name != value){_name = value;WPFRaisePropertyChanged("Name");}}
}
OnPropertyChanged是一种基于委托的自动触发属性更改事件的方法。当属性的值发生变化时,我们可以通过定义一个PropertyChangedEventHandler委托类型的事件来自动触发属性更改事件。例如:
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{get { return _name; }set{if (_name != value){_name = value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));}}
}
在使用OnPropertyChanged时,我们需要先定义一个PropertyChangedEventHandler委托类型的事件,并在属性发生变化时调用该事件即可。
总的来说,WPFRaisePropertyChanged是一种手动触发属性更改事件的方法,而OnPropertyChanged是一种基于委托的自动触发属性更改事件的方法。在MVVM模式中,我们通常使用OnPropertyChanged来实现属性更改事件的自动触发。
属性绑定bool值区反
在WPF的绑定中,有时会用到属性值为True时不选中,或者不启用,这时就需要用到Bool取反.
我们可以使用Converter来实现Bool值的取反。下面是一个简单的例子:
首先,在XAML中定义一个BooleanToInverseBooleanConverter:
<Window.Resources><local:BooleanToInverseBooleanConverter x:Key="BooleanToInverseBooleanConverter"/>
</Window.Resources>
然后,在绑定时使用该转换器:
<CheckBox IsChecked="{Binding IsSelected, Converter={StaticResource BooleanToInverseBooleanConverter}}"/>
最后,在C#中实现BooleanToInverseBooleanConverter:
public class BooleanToInverseBooleanConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool b){return !b;}return value;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool b){return !b;}return value;}
}
这个转换器将bool值转换为相反的bool值。在上面的例子中,当IsSelected属性为true时,CheckBox将处于选中状态,而当IsSelected属性为false时,CheckBox将处于未选中状态。
本文介绍了WPF中数据绑定的两个重要方法:WPFRaisePropertyChanged和OnPropertyChanged。前者是手动触发属性更改事件的方法,后者是基于委托的自动触发属性更改事件的方法。此外,本文还介绍了如何使用转换器实现bool值的取反,以及在WPF绑定中如何使用该转换器。需要的小伙伴学起来吧,有任何疑问可以给我留言!~