Сначала я хочу сказать, что приведенный ниже пример - упрощение.
Предположим, вы связали WPF-контроль.
<Window Title="Window1" Height="300" Width="300">
<Grid>
<StackPanel>
<TextBox Text="{Binding Name}" Margin="10"/>
<Button HorizontalAlignment="Center"
Content="Click Me" Margin="5"
Padding="2" Click="OnButtonClick" />
</StackPanel>
</Grid>
</Window>
Окно привязано к классу Person, который реализует INotifyPropertyChanged
и имеет установщик имени в форме
public string Name
{
get { return _name; }
set
{
_name = "Some Name";
OnPropertyChanged("Name");
}
}
т.е. _name присваивается «Some Name» всякий раз, когда пользователь пытается изменить его из пользовательского интерфейса.
Но этот образец не работает. Я изменил имя в TextBox на какое-то значение, нажимая вкладку, заставляя фокус переместиться на кнопку, и значение в TextBox остается неизменным, хотя событие PropertyChanged было запущено.
Не могли бы вы объяснить, почему это происходит? Как я понимаю, PropertyChanged
событие заставляет пользовательский интерфейс перечитывать значения из свойств и отображать их, но в моем примере значение в текстовом поле с привязкой к данным не обновляется.
Снова. Я понимаю, что это плохая реализация свойства, но я хочу повторить, что это упрощение.
Это просто образец.
Но в любом случае PropertyChanged сигнализирует, что свойство было изменено и должно быть обновлено, но это не так.