【问题标题】:INotifyPropertyChanged on Model classes模型类上的 INotifyPropertyChanged
【发布时间】:2015-12-05 14:27:33
【问题描述】:

通常需要在 Model 类、ViewModel 类或两者上实现 INotifyPropertyChanged 吗?是否可以仅在模型上实现,而不是在 Viewmodel 上实现?如果不可能的模型那么为什么

【问题讨论】:

  • 如果你使用非OneTime绑定,你的视图模型必须实现INotifyPropertyChanged,否则你会得到memory leaks

标签: wpf mvvm mvvm-toolkit


【解决方案1】:

基本规则是 - 任何架构都没有硬性规定,您可以根据自己的需要进行修改,这就是为什么有些架构更受欢迎的原因。

您的确切需求请通过this

this 的讨论中,有足够的要点来涵盖这两个论点,看看哪一个与您的项目匹配..

这可能会帮助您实现..

【讨论】:

    【解决方案2】:

    您必须了解 INotifyPropertyChanged 的​​含义。它的目的是在 WPF 中定义绑定时从目标向源发出通知。 DependencyProperty 和 INotifyPropertyChanged 与绑定概念的自动更新相关。如果您需要绑定视图模型上的属性来查看,则必须实现通知机制以在视图模型发生更改时通知 UI。相同的规则适用于模型到视图。

    假设您想在 .CS 文件中编写代码,例如 Viewmodel.Name =" my new name",并希望 TextBox 显示更改后的名称。

    <TextBox Text="{Binding ViewModel.Name} "/>
    

    这里的view model需要实现INotifyPropertyChanged。

    <TextBox Text="{Binding Model.Name} "/>
    

    这里的模型需要实现INotifyPropertyChanged

    希望它澄清。

    【讨论】:

    • 添加到虚拟机时可以正常工作。逻辑 VM vm=new VM() 背后的代码; vm.FName = "aa"; this.DataContext =vm; xmal 逻辑: VM 逻辑:公共字符串 FName
    • 尝试在您的问题中添加代码并尝试解释您可能对您有所帮助的确切问题
    【解决方案3】:

    在这个讨论中可能值得注意的是,微软自己在他们自己的模型中添加了 INPC,例如订阅 Web 服务时自动生成的类。我也在其他地方看到过它,包括在他们的 EF 资料中某处对它的模糊回忆。我自己使用 Castle Proxy 将其自动添加到我的 DAL 实体中,这样我就不必复制视图模型中的所有内容,尽管您也可以使用 Fody 等东西在后处理步骤中将其添加到 IL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2013-01-29
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多