c# - 如何为在 ViewModel 的 DataTemplate 中创建的 View 设置 DataContext

标签 c# wpf datatemplate datacontext

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

 <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 始终为空。我怎样才能达到我想要的? 谢谢

最佳答案

如果您为包含 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>

关于c# - 如何为在 ViewModel 的 DataTemplate 中创建的 View 设置 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11334680/

相关文章:

c# - 为什么 int.MinValue % -1 会导致 OverflowException

wpf - 重用 Viewbox 资源

c# - 如何更新 StackPanel 的布局?

WPF 延迟刷新 ItemsControl 中的 UI 元素

silverlight - Silverlight 4 中基于 DataContext 的 ContentTemplate 选择

c# - 读取、修改和写入 XML 的最佳方式

c# - 如何将 ILArray 转换为 double[,] 数组?

c# - 检测 Label 的变化

c# - 为什么 Listbox DataTemplate 不使用 Windows.Resources 样式?

WPF MVVM 访问 ItemsControl DataTemplate 内的元素