Двусторонняя привязка флажка Silverlight работает не так, как ожидалось
-
20-09-2019 - |
Вопрос
У меня простая проблема с установкой двусторонней привязки к данным флажка в Silverlight 3.0.Должно быть, это несложно, но, вероятно, сегодня я забыл свой мозг дома...
Я определил класс модели для представления моего .."данные".Я реализовал интерфейс INotifyPropertyChanged, чтобы пользовательский интерфейс мог видеть, когда данные изменяются.
public class Model : INotifyPropertyChanged
{
private bool _value;
public bool Value
{
get { return this._value; }
set
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
this._value = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Затем я устанавливаю флажок и кнопку на .."форма" :
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>
<Button Click="Button_Click" Content="Test" />
</StackPanel>
Затем я ввел данные в конструктор :
public MainPage()
{
InitializeComponent();
this.DataContext = new Model() { Value = true };
}
Проблема в том, что вам нужно дважды щелкнуть по флажку, чтобы установить / снять флажок, если я не отменю INotifyPropertyChanged .Однако, если отменить его реализацию, пользовательский интерфейс не заметит, если я изменю базовые данные.
Если я удалю бит Mode = TwoWay из выражения IsChecked binding, то пользовательский интерфейс также не заметит изменения базовых данных, даже если Модель реализует интерфейс.
Как я могу сделать, чтобы :
- Установите флажок, привязанный к данным при запуске
- Установите флажок IsChecked checkbox, чтобы изменить базовые данные
- Должен ли флажок обнаруживать изменение базовых данных и сам обновляться?
Решение
У вас ошибка последовательности в вашей процедуре set property, вам нужно назначить _value
до того , как уведомление об изменении :-
set
{
this._value = value;
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}