Это типичная реализация INotifyPropertyChanged для использования Binding в WPF / C #.
namespace notifications.ViewModel
{
class MainViewModel : INotifyPropertyChanged
{
public const string NamePropertyName = "CheckBoxState";
private bool _checkboxstate = true;
public bool CheckBoxState
{
get { return _checkboxstate; }
set
{
if (_checkboxstate == value) return;
_checkboxstate = value;
RaisePropertyChanged(NamePropertyName);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
У меня также есть код XAML, имеющий привязку к CheckBoxState
. ![enter image description here](https://i.stack.imgur.com/RfxAs.png)
<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>
Это MainWindow.xaml.cs для связи между DataContext и моделью.
public partial class MainWindow : Window
{
notifications.ViewModel.MainViewModel model = new notifications.ViewModel.MainViewModel();
public MainWindow()
{
InitializeComponent();
this.DataContext = model;
}
}
Когда пользователь устанавливает флажок, я думаю, что произойдет следующее: IsChecked
становится истинным, а с "{Binding Path=CheckBoxState, Mode=TwoWay}"
свойство CheckBoxState
становится истинным для вызова RaisePropertyChanged()
и, соответственно, PropertyChanged()
. Поскольку параметром этой функции является CheckBoxState
, каждый Binding with Path CheckBoxState
уведомляется об обновлении.
- Как активируется этот звонок
<TextBlock Text="{Binding Path=CheckBoxState, Mode=TwoWay}" />
? В чем суть C #, чтобы сделать это возможным?
- Почему
if (PropertyChanged != null)
необходимо? Кто устанавливает PropertyChanged на какое значение?
- Значение
Mode=TwoWay
выглядит так, что оно не только может сигнализировать об изменении, но и обновляет содержимое, когда изменяется другой элемент Binding с таким же именем в привязке, тогда как насчет режима OneWay? Можем ли мы установить привязку только в качестве источника или цели?