【发布时间】:2016-07-01 08:39:43
【问题描述】:
我将一个属性从一个对象绑定到一个控件,但该属性不会更新...
我是这样试的:
ViewModelBase:
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
视图模型:
public class VIewModel : ViewModelBase
{
private Person _person;
public Person Person
{
get { return _person; }
set
{
_person = value;
OnPropertyChanged(nameof(Person));
}
}
}
人物类:
public class Person
{
public string Name { get; set; }
public string FirstName { get; set; }
}
App.xamls.cs
protected override void OnStartup(StartupEventArgs e)
{
var viewModel = new VIewModel
{
Person = new Person{FirstName = "Dominik", Name = "Muster"}
};
var window = new MainWindow {DataContext = viewModel};
window.Show();
base.OnStartup(e);
}
主窗口:
<StackPanel>
<TextBox Text="{Binding Person.Name}"/>
<TextBox Text="{Binding Person.FirstName}" Width="200"/>
</StackPanel>
程序启动时,文本框的值是联系人对象的值,但是如果我更改文本框中的文本值,属性将不会更新...有什么想法吗?
【问题讨论】:
-
尝试在Person类中实现INotifyPropertyChanged?
-
您必须通知视图模型您希望何时更新属性,因此在您的绑定中添加 UpdateSourceTrigger 并将其设置为 PropertyChanged,您的属性将反映文本框中的值:Text="{Binding Person.Name, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}
-
@Sabrina_cs 你的解决方案不起作用...
-
@cicciorocca 感谢您的解决方案!它有效!
标签: c# wpf xaml mvvm data-binding