我正在使用 MVVM light 工具包来处理按钮单击。如果我这样做:
CustomerSaveCommand = new RelayCommand(
() => CustomerSave(),
()=> true);
private void CustomerSave() {
customer.Address="My Street";
}
该函数被调用,但 UI 中绑定(bind)的地址字段未更新。
如果我将 customer.Address="1234"
放入 ViewModel 构造函数中,UI 就会更新。我做错了什么?
编辑:
问题真的很奇怪:如果我在窗口加载它运行时执行 viewModel.customer.City = "CITY1"
,如果我添加一个按钮,并且在代码隐藏单击中,我添加 viewModel.customer.City = "CITY2"
它不起作用。
最佳答案
View 模型中的客户对象需要实现 INotifyPropertyChanged界面。
然后在地址属性 setter 中,您将调用 PropertyChanged 事件。
或者,您的 viewModel 可以实现 INotifyPropertyChanged 接口(interface),并且可以包装 Address 属性并调用 PropertyChanged 事件。您必须更新绑定(bind),但模型对象不必实现任何接口(interface)。
当您在构造函数中修改对象时看到地址显示的原因是因为绑定(bind)尚未发生。为了更新 UI,您需要指示绑定(bind)引擎属性绑定(bind)已更改。为此,您可以使用 INotifyPropertyChanged 接口(interface)。
关于wpf - ViewModels 成员未在命令上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12662175/