wpf - ViewModels 成员未在命令上更新

标签 wpf mvvm-light

我正在使用 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/

相关文章:

c# - 如何使用azure sql进行多接口(interface)框架

c# - WPF ListView从ListView更新源

wpf - mvvm light icleanup 和 messenger 在 VB.NET 中注销

c# - MVVM Light Dispatcher 帮助程序设计时错误

WPF 弹出窗口夺走了所有者的焦点

c# - 如何在需要时创建 Prism 的 View 模型?

wpf - 如何防止新的STA线程上的非模式窗口关闭

wpf - MVVM Light DispatcherHelper 和带 MSTest 的单元测试

c# - 我应该在通用应用程序中使用什么 MVVM 框架

c# - MVVM 光 : RelayCommand : define it lazy or in constructor?