【问题标题】:MVVM - Viewmodels in Datagrid rows?MVVM - Datagrid 行中的视图模型?
【发布时间】:2013-02-10 23:11:26
【问题描述】:

我想写一个小程序来管理文章。 pgm 应该在数据网格中显示文章列表。

可以是必须在网格中显示的 500/1000 篇文章。 我是否应该像 josh smith 在他的示例中所做的那样在数据网格行中使用视图模型 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

我在 joshs 示例中进行了一些测试。 所以我把他的customers.xml 文件扩展为800 个客户。 -> 应用程序需要一点(更多)时间来启动和关闭它(如果显示单击“显示所有客户”按钮)将需要几秒钟。那么使用视图模型的系统应该是一个沉重的负担吗? 有人可以解释一下使用视图模型作为数据网格行而不是文章的优势吗?

有什么更好的方法?

public ObservableCollection<ArticleViewModel> AllArticle { get; private set; }

public ObservableCollection<Article> AllArticleraw { get; private set; }

【问题讨论】:

  • 如果这是一个小项目并且您关心的是性能和时间,那么 MVVM 将是矫枉过正。

标签: wpf mvvm datagrid viewmodel


【解决方案1】:

是否将 ViewModel 用作 DataGrid 行实际上取决于每行必须具有多少功能。

如果网格是只读的,仅用于显示目的,并且底层数据不会更改,那么 ViewModel 可能会为一行而过度杀伤。

但是,如果您的用户可能与该行交互,可能会编辑一行中的值,或者如果该行中的值可能由于外部操作而发生更改,并且您希望这些更改自动反映在网格中,那么您应该考虑 ViewModel。

请记住,ViewModel 只是为某个目的服务的对象的名称 - 它可以根据您的需要而重或轻。例如,如果您希望您的行立即反映网格中的更改,它可以是一个简单的 POCO,它具有每个行列的属性,然后实现 INotifyPropertyChanged 以在其中一个属性值发生更改时通知网格。

不要让 ViewModel 的重量级实现吓跑您远离 MVVM 的概念 - 只在每个 ViewModel 中实现您需要的功能。

【讨论】:

  • 问题:如果在数据网格中使用视图模型,数据网格可以像添加行一样创建新的视图模型吗?
  • 我不能 100% 确定这一点,但我认为 WPF DataGrid 不会为您创建新的 ViewModel。我通常做的是有一个单独的按钮来添加新项目,给他们一个视图以提供新项目的详细信息,然后当他们完成后,保存项目并将其添加到 DataGrid 底层的集合中。如果您想留在网格内,我建议您查看 DataGrid 的AddingNewItem 和 EndRowEditing events,您可以在其中创建自己的 ViewModel。
猜你喜欢
  • 2014-08-04
  • 2019-01-19
  • 2013-05-27
  • 2010-12-07
  • 2011-06-15
  • 2012-06-08
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
相关资源
最近更新 更多