【问题标题】:MVVM ViewModel lots of propertiesMVVM ViewModel 很多属性
【发布时间】:2013-06-13 04:33:22
【问题描述】:

我是 MVVM 的新手,我正在开发一个应用程序。我有一个包含很多属性的表单视图。大约 50。我不能将这些分离到用户控件中,因为我会破坏 mvvm 原则。

我不能将它们分成模型,因为它们包含逻辑。 PropertyChange、Error change 这些都不是 poco 类,也不是模型。

如果我在同一个视图模型中保留 60 个属性会很好吗?

我觉得有错吗? 你会如何组织这些?

【问题讨论】:

  • 为什么不能在不破坏 MVVM 的情况下创建 UserControl
  • Viv 的一个好问题。您可以在主要 ViewModel 中为用户控件制作 ViewModel。您也可以使用某种“控制器”层进行逻辑,并仅通过 PropertyChanged 实现保持 ViewModel 清洁。最明智的方法是:创建基础视图模型并从中派生。
  • 我知道我不能使用 UserController 因为stackoverflow.com/questions/17048066/…
  • 我会说:如果您需要在视图中显示 60 个东西 - 那么您必须在视图模型中保留 60 个属性。但当然,如果您可以在用户控件中拆分视图,您也可以拆分视图模型
  • 听起来不错,比如我有一个formview和一个formviewmodel给它,我可以写一个addressviewmodel作为它的一部分吗?

标签: c# .net wpf mvvm mvvm-light


【解决方案1】:

我不能将它们分离到用户控件中,因为我会破坏 mvvm 原则。

我不确定你的意思。本质上,您需要使用视图组合并将视图模型和视图分解为组成部分。

视图是 WPF UserControl(或 Window),因此如果您使用 MVVM,那么您使用的是 UserControl,只是从概念上讲它们被视为模式中的视图。

我还建议您使用use an MVVM framework if you're using the MVVM patternCaliburn.Micro 之类的东西可以让视图合成变得异常简单。

我也不建议对视图模型使用依赖属性,use INotifyPropertyChanged instead

大多数 MVVM 框架提供了一个基本视图模型类型,其中包括一个基于 lambda 的方法来调用 PropertyChanged 事件,从而有助于重构。

【讨论】:

  • 我是新手,但我读到我可以只使用带有依赖属性的用户控件,因为所有属性都应该在视图模型中,并且用户控件将通过依赖属性显示它。所以如果我使用用户控件,dep 属性仍然保留在视图模型中。只是会有更多的行
  • 您的视图将是声明性 XAML 的用户控件,并将实例化控件,例如 TextBlock,该控件将具有依赖属性,例如其 Text 属性。绑定的目标需要是依赖属性,而不是源。因此,您的视图模型将实现 INPC,并且绑定仍然有效,因为 TextBlock 目标属性是一个依赖属性。
  • 好的,但在这种情况下,主视图模型中的属性不会被分离。我可以创建一个没有视图的视图模型,并在主视图模型中使用它吗?
  • 为什么不能分开?
【解决方案2】:

请不要将PropertyChanged 用于60 Properties。使用DependencyProperty。 对于可用性,请使用 Visual Studio 中的propdp 快捷方式,然后按两次Tab

请参考此链接: http://www.codeproject.com/Articles/62158/DependencyProperties-or-INotifyPropertyChanged

【讨论】:

  • 好吧,既然文章的作者指出了一些观点,当建议实现INotifyPropertyChanged(例如测试)时,你不应该在没有提示的情况下推荐使用DependencyProperty,有一些限制。
  • 好吧,既然我发了这篇文章的链接,这个问题的作者可以仔细阅读它:) 当然你是对的,最好让他考虑而不是仅仅推荐使用DependencyProperty
  • 对不起,我不同意。 请不要将 PropertyChanged 用于 60 个属性。使用 DependencyProperty.[...] 意味着没有缺点。我认识我,我也认识其他开发人员……我们讨厌文字墙,所以他可能会忽略缺点。
  • 根据他的问题推荐DependencyProperties没有错。对于其他所有考虑,可以阅读这篇文章。
  • 请参阅这篇文章以获得反驳:kent-boogaart.com/blog/…:结论:“我认为 POCO 视图模型 [即 INotifiyPropertyChanged] 优于 DependencyObject 视图模型的优势是明确且令人信服的。
猜你喜欢
  • 2017-11-10
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多