gpt4 book ai didi

c# - 我是否需要持有至少 1 个 View 模型来处理我的所有 View ?

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:29 24 4
gpt4 key购买 nike

例如,我有几个 View ,每个 View 都有 View 模型,然后我的主视图模型将处理所有这些 View ,以便我导航或将其加载到主窗口。我是否绕过了 MVVM 的规则?因为有一个知道我所有 View 的主视图模型?

最佳答案

有两种接近 MVVM 设计的方法: View 优先和 View 模型优先。尽管它们都是有效的,但它们各有优缺点。两者都确保 View 模型不以任何方式依赖于 View ,只有 View 依赖于 View 模型。您的解决方案是有效的 MVVM,但会导致 View 层和 View 模型层之间存在循环依赖关系。所以我建议坚持使用任何一个

查看优先

您从 MainWindow.xaml 开始,然后根据需要进行设计。您通过添加

在 View 代码中为每个窗口/对话框/控件实例化一个 View 模型
<MainWindow.DataContext>
<vm:MainViewModel>
</MainWindow.DataContext>

进入 XAML 并开始绑定(bind)您的所有状态,以便您可以将行为移入该 MainViewModel 类。

此方法的专业版使用依赖注入(inject)容器(autofacninject 等)来实例化 MainViewModel,而 MainWindow 实际上不知道 View 模型的具体类型。

View 模型优先

bootstrapper ,您以某种方式将 MainWindow.DataContext 设置为其 View 模型的实例,但除此之外,您依赖 DataTemplate 来实例化 View (无法使用 DataTemplate 实例化 Window,抱歉)。

viewmodel 中的每个可绑定(bind)属性都可以绑定(bind)到 ContentPresenter,viewmodel 中的每个可绑定(bind)集合都可以绑定(bind)到 ItemPresenter 的子类(ListBox、ComboBox 等),您就快完成了。

关于c# - 我是否需要持有至少 1 个 View 模型来处理我的所有 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com