Does your Person
class members Name
and Age
raise INPC themselves?
If you want to update the value of either Name
or Age
in the ViewModel
and have it reflect in the view, you need them to raise property changed individually inside Person
class as well.
The bindings are fine, but the view is not notified of changes from the view model. Also remember UpdateSourceTrigger
for a TextBox
by default is LostFocus
, so setting that to PropertyChanged
will update your string in the ViewModel
as you're typing.
Simple example:
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 ...
}
Now your xaml would be:
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name}" />
<TextBox Margin="15"
Text="{Binding Age}" />
</StackPanel>
or you can also bind as suggested by @Kshitij:
<StackPanel>
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Margin="15"
Text="{Binding CurrentPerson.Age}" />
</StackPanel>
and to update view model as you're typing:
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Margin="15"
Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…