【问题标题】:Notifying ViewModel of Property change from Model class从 Model 类通知 ViewModel 属性更改
【发布时间】:2013-07-10 14:26:38
【问题描述】:

在我的 WPF 应用程序中,我将 TreeView IsSelected 属性绑定到我的模型类中的一个属性。所以选择的项目是在模型类中设置的。每当设置/更改所选项目时,我都需要通知我的 ViewModel。我该怎么做?

提前致谢。

【问题讨论】:

  • 检查this 的“更新”部分。如果 Model 属性符合 INPC,Josh Smith's PropertyObserver 非常好。如果它没有实现 INPC,请将 View 的 SelectedItem 属性绑定到 VM 而不是模型,并在属性设置器中从 VM 更新模型。
  • 如果您想通知 viewmodel 您的属性更改,您需要绑定到 viewmodel 中存在的属性,或者您可以简单地创建另一个属性并将您的模型属性分配给该 viewModel 属性,以便每次选择您的视图模型属性更改将引发..
  • 我无法绑定到 ViewModel 中的属性。我的模型和视图模型都实现了 INotifyPropertyChange 类。我可以以某种方式使用它吗? OnPropertyChange("PropertyName") PropertyName 在 ViewModel 中,但我的模型没有引发该属性可能是因为它无法找到该属性。有什么想法吗?
  • @WQad 你检查了我链接的PropertyObserver 类吗?既然你提到你的模型实现了 INPC,那是我能想到的最干净的方法,因为虚拟机和模型之间存在弱依赖关系。

标签: wpf xaml treeview wpf-controls


【解决方案1】:

我猜您的 Model 实例是您的 ViewModel 的一部分...首先,是的,它应该实现 INotifyPropertyChanged。如果您还希望您的 ViewModel 得到通知,那么您的 ViewModel 应该订阅该事件。

public class Model : INotifyPropertyChanged
{
   private string _name;
   public string Name {
      get {return _name;}
      set {
         _name = value;
         NotifyPropertyChanged("Name");
   }
// etc... including INPC implementation
}

public class ViewModel : INotifyPropertyChanged {
   public ViewModel (Model model){
      this.MyModel = model;
      this.MyModel.PropertyChanged += (s,e) => { DoSomething();};
   }

   public Model MyModel { get; set; }
}

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 2021-11-09
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多