【问题标题】:MVVM - Controls versus ViewsMVVM - 控件与视图
【发布时间】:2010-11-05 10:15:13
【问题描述】:

我一直在不使用 MVVM 的情况下在 WPF 中制作原型。现在它的大小已经很大了,我正在重构它以使用 MVVM。

当我开始这个项目时,我直接进入并为很多事情创建了用户控件。

我现在正在破坏视图和视图模型中的内容。但是,我最终得到了包含 UserControls 的视图; UserControls 绑定到模型中现在的对象。

那么,UserControls 的概念现在在 MVVM 中已经死了吗?我的意思是,在过去(WinForms、ASP.NET 等)你会有一个名为“控件”的项目并重用它们。 MVVM 中的“视图”是否可以直接替代典型的 UserControl?

【问题讨论】:

    标签: wpf silverlight design-patterns mvvm viewmodel


    【解决方案1】:

    嗯...当我有用户控件时,我只是将 DataContext 从视图传递给用户控件(该用户控件所需的子信息)。但确实如此,有时很难将 ViewModel 与 Views、UserControls 相匹配......

    【讨论】:

      【解决方案2】:

      我在 MVVM 世界中看到 UserControls 的方式是作为一个视图。与其将您的 WPF 表单视为单个视图,不如将其视为一个或多个视图的组合。因此,UserControl 可以封装一个标准的可重用视图,该视图可以合并到多个复合视图中。非常适合可重用性,而且它们仍然是可测试的。

      【讨论】:

        【解决方案3】:

        WPF 中的UserControl 只不过是带有一些调整的默认属性值的ContentControlContentControl 只不过是可以应用模板来定义其外观的一段内容。

        我做MVVM的方式跳过了中间人,将视图定义为DataTemplates。然后你只需要将你的虚拟机粘贴到 WPF 的可视化树的某个地方,WPF 就会用你的DataTemplate 渲染它。例如:

        <ContentControl Content="{Binding SomeViewModel}"/>
        
        <ItemsControl ItemsSource="{Binding SomeViewModels}"/>
        

        【讨论】:

        • 这正是我所做的 Kent,但没有理由不能将 UserControl 包装在 DataTemplate 中并让绑定完成它的工作,对吧?
        猜你喜欢
        • 1970-01-01
        • 2014-12-03
        • 2011-07-03
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多