如何从ViewModel为在DataTemplate中创建的View设置DataContext

5

已经有关于这个问题的提问了,但它们并不能回答我的问题。例如:

 <ContentControl.Resources>
            <DataTemplate DataType="{x:Type Databinding:RedScreenViewModel}" >
                <Databinding:RedScreen DataContext="{Binding}"/>
            </DataTemplate>
            <DataTemplate DataType="{x:Type  Databinding:BlueScreenViewModel}">
                <Databinding:BlueScreen DataContext="{Binding}" />
            </DataTemplate>
 </ContentControl.Resources>

您可以看到,我正在尝试为创建的视图设置DataContext,希望它使用创建它的ViewModel。但是当我通过代码进行步进时.. DataContext始终为空。我该如何实现我的目标? 谢谢

1个回答

10
如果为您的ViewModel类定义一个带有View控件的DataTemplate,它将自动将DataContext设置为ViewModel。
这个应该可以工作:
<ContentControl.Resources>
    <DataTemplate DataType="{x:Type Databinding:RedScreenViewModel}">
        <Databinding:RedScreen />
    </DataTemplate>
    <DataTemplate DataType="{x:Type Databinding:BlueScreenViewModel}">
        <Databinding:BlueScreen />
    </DataTemplate>
</ContentControl.Resources>

尝试在Window.Resources中设置DataTemplates。 - LPL
构造函数中的DataContext仍为空。 - Lews Therin
3
在 View 构造函数中?我认为 DataContext 将会在稍后设置。 - LPL
3
好的,让我看看能否订阅DataContextChangedEvent事件。 - Lews Therin
你是对的。它稍后被设置了。订阅DataContextChangedEvent似乎解决了问题。 - Lews Therin
DataContextChangedEvent 解决了这个问题!非常感谢! - peter70

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接