【问题标题】:How to set the DataContext for a View created in DataTemplate from ViewModel如何从 ViewModel 为在 DataTemplate 中创建的视图设置 DataContext
【发布时间】:2012-07-04 19:44:03
【问题描述】:

已经有关于此的问题,但他们没有回答我的问题。 例如:

 <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>

如您所见,我正在尝试为创建的 View 设置 DataContext,希望它会使用用于创建它的 ViewModel。但是当我单步执行后面的代码时…… DataContext 始终为空。我怎样才能达到我想要的? 谢谢

【问题讨论】:

    标签: c# wpf datatemplate datacontext


    【解决方案1】:

    如果您为包含 View 控件的 ViewModel 类定义 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。
    • 构造函数中的DataContext仍为null。
    • 查看构造函数?我认为DataContext会在以后设置。
    • 哦该死的..让我看看我是否可以订阅 DataContextChangedEvent
    • 你是对的。是后来设置的。啊。订阅 DataContextChangedEvent 似乎可以解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2013-12-04
    • 2016-02-06
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多