mvvm - 如果我的 ViewModel 'creates' 可绑定(bind)用户控件用于我的 View ,可以吗?

标签 mvvm

我有一个带有选项卡控件的入口点 View 。每个选项卡都将嵌入一个用户控件。每个嵌入 View 都继承自同一个基类,并且需要随着入口点 View 上的关键字段的更新而更新。

我认为设计此页面的最简单方法是让入口点 ViewModel 创建并公开一组 View ,以便入口点 View 可以使用选项卡控件上的 DataTemplate 绑定(bind)到用户控件元素。

ViewModel 可以为其 View 实例化并提供 UI 元素吗?

最佳答案

这是一个困难的问题,但大多数 MVVM 人认为这是一种代码异味。

ViewModel 不应该关心 UI 实现细节。 (Separation of Concerns)
它完全超出了它的范围。

我知道,有时很难做到这一点。 (尤其是具有不可绑定(bind)属性的控件,例如 RichTextBox 的 Document 属性。)
如果您分享了有关您的想法的更多细节,我可以更详细地介绍,但这是我的想法:

是什么阻止您在 XAML 中创建这些 subview ?我肯定会与 ViewModel 分开定义我的所有 View 代码。 (这就是拥有 ViewModel 的意义所在。)
如果您在选项卡控件的 XAML 中定义这些 View ,则可以从选项卡控件的 View 的 ViewModel 将您希望成为其 ViewModel 的对象绑定(bind)到它们的 DataContext。

您可以在 this answer 中阅读我对 MVVM 的一般看法。 .

关于mvvm - 如果我的 ViewModel 'creates' 可绑定(bind)用户控件用于我的 View ,可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892129/

相关文章:

wpf - Nettiers WPF MVVM

xaml - 在 ListView MVVM 中绑定(bind)复选框

c# - 如何为 x :Static 设置后备值

wpf - 无法通过WPF设置表格宽度

c# - 如何将用户控件复选框绑定(bind)到列表框中

c# - 在 mvvm 中选择的列表框第一项

javascript - 如何将函数移动到 MVVM 中的单独文件?

c# - 如何将模型属性包装在 ViewModel 属性中

wpf - 如何停止ViewModel代码在设计器中运行?

c# - 这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection