【发布时间】:2014-07-12 07:33:42
【问题描述】:
我对在 viewmodel 中创建 ui 元素有些困惑?如果是,那怎么可能?
提前致谢。
【问题讨论】:
标签: wpf mvvm view model viewmodel
我对在 viewmodel 中创建 ui 元素有些困惑?如果是,那怎么可能?
提前致谢。
【问题讨论】:
标签: wpf mvvm view model viewmodel
不,在 mvvm 模式中,视图模型只负责提供数据和状态。
理论上,您可以将多个视图连接到同一个视图模型;例如,用于图形显示的 wpf 视图和用于文本模式的命令行。如果您这样认为,那么在哪里放置哪些功能是有意义的。
如果您想以编程方式创建 UI 对象,您可以在视图代码隐藏中执行此操作。绝对允许您在那里执行此操作并像在传统表单项目中那样参与任何事件。
【讨论】:
你为什么要这样做?是否需要在运行时生成动态 UI?
ViewModel 不适用于 UI 元素,但它可以保存 UI 元素的支持数据元素(例如组合框的项目列表)。
UI 是 View 的工作。您可以在运行时生成 XAML,但我不会“在 ViewModel”中创建它,我会创建一个单独的、不同的演示者或控制器类,或者在逻辑后面使用 XAML 代码。您可以通过 ViewModel 反射来生成 XAML,但我会将 ViewModel 限制为 View 和 Model 之间的数据和中介,并保持所有 UI 分开。
我不是 WPF 专家,我只是从 MVC/MVVM 的一般最佳实践角度和 ViewModel 的目的来回答。从理论上讲,您的 ViewModel 应该可以跨多个 UI 表示层 (ASP.NET/Razor/XAML) 重用,因此避免在 ViewModel 中使用特定于 UI 的标记。限制为属性、容器、方法、数据访问调用或服务调用等。
【讨论】: