Search code examples
c#wpfdatatemplatedatacontext

How to set the DataContext for a View created in DataTemplate from ViewModel


There are questions on this already, but they don't answer my question. For example:

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

As you can see I am attempting to set the DataContext for the created View hoping that it would use the ViewModel that was used to create it. But when I step through the code behind.. the DataContext is always null. How can I achieve what I want? Thanks


Solution

  • If you define a DataTemplate for your ViewModel class with a View control in it, it will automatically have the DataContext set to the ViewModel.

    This should work:

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