gpt4 book ai didi

wpf - 如何使用具有持久 ViewModel(s) 的 DataTemplate

转载 作者:行者123 更新时间:2023-12-03 10:37:19 26 4
gpt4 key购买 nike

我开始绑定(bind)ContentControls存储在我的 ViewModels 中的 View ,虽然它按预期工作,但它破坏了 MVVM我一直试图遵循的模式。只是觉得很脏。于是,根据某位 friend 的推荐,得知了DataTemplates ,实现了它,这是一个很棒的解决方案。但是,我遇到了一个障碍,很可能是我知识的限制,所以我在这里提前感谢。

前提

我的问题描述基于我收集到的关于使用 DataTemplates 的信息。 ,所以如果我的前提是错误的,如果你能在评论中给我打个电话,这样我就可以更好地理解(如果他们发现这个问题,对于其他人来说也是如此),那就太好了。

一个 ContentControl的 Content 属性绑定(bind)到 ViewModel 中的属性类型引用任何 ViewModel 实现的接口(interface)这可能是需要的。 每当属性设置为适当的 ViewModel , ContentControl看着DataTemplate确定哪个View加载,然后初始化相应的 View ,然后 View初始化它自己的ViewModel .最后一句话非常关键,所以如果我错了,我的理解是错误的,我的问题的本质不是我想的 .这是来自 UserControl 的代码片段包含 DataTemplate :

<UserControl.DataContext>
<viewModels:ControlCenterVM />
</UserControl.DataContext>
<UserControl.Resources>
<DataTemplate DataType="{x:Type moduleViewModels:StateVM}">
<moduleViews:StateView/>
</DataTemplate>
<DataTemplate DataType="{x:Type moduleViewModels:InputVM}">
<moduleViews:InputView/>
</DataTemplate>
<DataTemplate DataType="{x:Type moduleViewModels:TemperatureVM}">
<moduleViews:TemperatureView/>
</DataTemplate>
<DataTemplate DataType="{x:Type moduleViewModels:NetworkControlVM}">
<moduleViews:NetworkControlView />
</DataTemplate>
</UserControl.Resources>

<ContentControl Content="{Binding LeftModule}" />

问题
View加载的会创建一个新的 ViewModel . ViewModel我应该使用的实际上与我为绑定(bind)到 ContentControl 的属性设置的完全相同。但在我看来,它只使用它来为 View 进行类型匹配抬头。它是否正确?

DataContext我上面提供的代码片段的一部分。我所有的 Views , 尤其是那些“可以”加载到 ContentControl 中的 ,创建他们的 DataContext像这样。如何引用静态 ViewModel在那些领域?

再次感谢。

最佳答案

Whenever the property is set to the appropriate ViewModel, the ContentControl looks at the DataTemplate to determine which View to load and then it initializes the corresponding View and then that View initializes it's own ViewModel.



除了我强调的最后一部分之外,您对所有事情都是正确的。

设置 Content ContentControl 的属性有效地设置 DataContext对于它显示的 View 。 这意味着您不必设置 ViewModel明确地从你的观点。

只需删除您对 DataContext 所做的任何修改即可您认为的属性(property),一切都应该按预期工作。

关于wpf - 如何使用具有持久 ViewModel(s) 的 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370107/

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