【问题标题】:WPF dependency property MVVMWPF 依赖属性 MVVM
【发布时间】:2012-07-18 19:34:07
【问题描述】:

我正在创建一个用户控件,这个控件会做一些工作,然后填充三个依赖属性,然后通过绑定被控件的父元素使用。

我的问题是使用 MVVM 在哪里保留依赖项属性的最佳实践是什么? 我应该为 MVVM 使用框架吗?

谢谢

【问题讨论】:

  • 是的,使用 MVVM 框架。我喜欢 MVVM-Light。
  • 如果您正在研究 MVVM 框架,您可能会对这个问题感兴趣:What framework for MVVM should I use?。我个人使用 Microsoft Prism,但偶尔我会使用部分 MVVM 灯(例如,当我想要一个在属性更改时自动重新评估 CanExecute() 的命令时使用 RelayCommand
  • 依赖属性框架称为依赖属性。

标签: wpf mvvm mvvm-light dependency-properties


【解决方案1】:

DependencyProperties 旨在供 WPF 的绑定系统使用,该系统将 UI 层与数据层联系起来。它们应该保存在 UI 层,而不是数据层 (ViewModels)

是否应该使用框架的问题是完全不同的。

我肯定会推荐一个包含在 MVVM 中经常使用的通用事物的框架(继承 INotifyPropertyChangedRelayCommandDelegateCommand 的对象的基类,像 EventAggregtor 或 @987654327 这样的消息传递系统@ 等),但是我鼓励您在使用框架之前先花时间弄清楚 MVVM 是如何工作的 :)

【讨论】:

    【解决方案2】:

    惯用的依赖属性与 ViewModel 表示的“视图状态”无关,也没有理由将它们添加到 ViewModel。我会将它们放在一个文件中,该文件包含您正在实现的控件的行为。

    【讨论】:

    • 我认为您将 MVVM 与 WPF 控件的依赖项属性混淆了。我会将代码放在以您创建的控件命名的文件中。术语代码隐藏通常用于连接特定对象。
    【解决方案3】:

    虽然您可以在不使用框架的情况下实现 MVVM 模式,但为什么要重新发明轮子?只需使用众多出色的 MVVM 框架之一(Caliburn、MVVMLight、Simple MVVM Toolkit 等等……)。

    【讨论】:

    • 我必须从 DependencyObject 继承我的视图模型,这是一个好习惯吗?
    • 我认为有问题的属性是与用户控件状态相关的 DP,而不是与 VM 相关的模型相关属性。这意味着它们是严格的仅供查看的属性,并且属于 UC 本身。 @Ali - 你的虚拟机不需要从 DependencyObject 继承。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多