Ответ 1
Являются ли ваши члены класса Person
Name
и Age
сами поднимут INPC?
Если вы хотите обновить значение Name
или Age
в ViewModel
и отразить это в представлении, вам нужно, чтобы они изменяли свойство, измененное индивидуально внутри класса Person
.
Связывание прекрасное, но представление в значительной степени не сообщается об изменениях из модели представления. Также помните, что UpdateSourceTrigger
для TextBox
по умолчанию: LostFocus
, Установка этого параметра в PropertyChanged
будет обновлять вашу строку в ViewModel
в качестве вашего ввода.
Простой пример:
public class Person : INotifyPropertyChanged {
private string _name;
public string Name {
get {
return _name;
}
set {
if (value == _name)
return;
_name = value;
OnPropertyChanged(() => Name);
}
}
// Similarly for Age ...
}
Теперь ваш xaml будет:
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name}" />
<TextBox Margin="15"
Text="{Binding Age}" />
</StackPanel>
или вы также можете связать, как было предложено @Kshitij
<StackPanel>
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Margin="15"
Text="{Binding CurrentPerson.Age}" />
</StackPanel>
и обновить модель представления в качестве ввода
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Margin="15"
Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>