C# WPF INotifyPropertyChanged如何工作?
这是在WPF/C#中使用绑定的典型INotifyPropertyChanged实现 我还有一个绑定到C# WPF INotifyPropertyChanged如何工作?,c#,wpf,C#,Wpf,这是在WPF/C#中使用绑定的典型INotifyPropertyChanged实现 我还有一个绑定到CheckBoxState的XAML代码 <Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <CheckBox Content="Click Me" IsChecked="{Binding Path=CheckBoxState, Mode=Tw
CheckBoxState
的XAML代码
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox Content="Click Me" IsChecked="{Binding Path=CheckBoxState, Mode=TwoWay}" />
<TextBlock Text="{Binding Path=CheckBoxState, Mode=TwoWay}" />
</StackPanel>
</Grid>
当用户设置复选框时,我认为会发生如下情况:IsChecked
变为true,并且随着“{Binding Path=CheckBoxState,Mode=TwoWay}”
,CheckBoxState
属性变为true以调用RaisePropertyChanged()
。由于此函数的参数是CheckBoxState
,因此会通知每个具有路径CheckBoxState
的绑定进行自我更新
- 此调用如何激活
?这背后的C#的魔力是什么 - 如果(PropertyChanged!=null)有必要,为什么
?谁设置的属性更改为什么值李>
的意思是,它不仅可以发出更改的信号,还可以在绑定中具有相同名称的其他绑定元素更改时更新内容,那么单向模式呢?我们可以将绑定设置为仅源还是仅目标李>Mode=TwoWay
绑定
对象,该对象将TextBlock的文本属性链接到ViewModel属性。它还将事件处理程序添加到ViewModel的PropertyChanged事件中,以在ViewModel触发PropertyChanged事件(使用right属性)时更新文本值
如果(PropertyChanged!=null)有必要,为什么?谁设立了
物业的价值是多少
如果PropertyChanged事件为null,则触发它将导致NullReferenceException
Mode=TwoWay
的含义似乎是它不仅可以向
更改,但在使用其他绑定元素时也会更新内容
绑定中的相同名称发生了变化,那么单向模式呢?我们可以吗
将绑定设置为仅源还是仅目标
绑定模式为:
- 双向:当ViewModel属性更改时更改绑定值,反之亦然
- 单向:仅当ViewModel属性更改时更改绑定值
- OneWayToSource:仅当绑定值更改时才更改ViewModel属性
- OneTime:仅当创建应用程序或数据上下文更改时,将绑定值设置为ViewModel属性的值
您可以在此处了解更多信息:我相信还有一种一次性绑定模式,在加载控件时只更新一次。@Yuf:好的地方:我将把它添加到我的答案中。这一行是如何工作的--PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox Content="Click Me" IsChecked="{Binding Path=CheckBoxState, Mode=TwoWay}" />
<TextBlock Text="{Binding Path=CheckBoxState, Mode=TwoWay}" />
</StackPanel>
</Grid>
public partial class MainWindow : Window
{
notifications.ViewModel.MainViewModel model = new notifications.ViewModel.MainViewModel();
public MainWindow()
{
InitializeComponent();
this.DataContext = model;
}
}