【发布时间】:2016-12-22 11:50:30
【问题描述】:
我正在使用 MVVM Light 库开发一个应用程序(c#、wpf)。
我有一个带有 ViewModel 的主窗口,附加为DataContext="{Binding Main, Source={StaticResource Locator}}"。没关系。
但在主窗口中我有不同的用户控件。目前使用哪一个由如下切换器定义:
<DataTemplate DataType="{x:Type model:Type1}">
<controls:UC1 Content="{Binding}"/>
</DataTemplate>
问题是如何为 UserControl 声明 ViewModel 并将其链接到 UC DataContext。如果这将支持设计时演示数据,那就太好了。
【问题讨论】:
-
为什么要“为 UserControl 声明 ViewModel 并将其链接到 UC DataContext”?当您正确使用 DataTemplates 和 ContentControls 时,这会自动完成。这表明要么 1) 你不是,要么 2) 你正在创建视图模型,专门用于控制你的用户控件的行为。我无法从您的问题中判断 #1 是否为真,如果 #2 为真,请停止。 TextBox 有 TextBoxViewModel 吗?不,MVVM != 没有代码隐藏。 UI 逻辑在你的代码隐藏中。
-
@ 是的,我现在链接我的 UC DataContext。你说得对,我的主要目标是控制 UC 行为(#2)。我为什么要做是因为那个UC比较复杂(其实每个控件都是一个小程序,但是我想在主窗口下集成几个)。
-
创建控制 UserControls 行为的 ViewModel 可能会给您带来麻烦。最常见的方式是干扰 DataContext 的流动。您可能会发现自己试图将类似伪 DataContext 的属性绑定到您的视图模型,或者在处理 DataContext 中的内容时遇到问题。解决方案是不要这样做。将您的 UI 逻辑放在代码隐藏中。
标签: c# wpf mvvm mvvm-light