Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 899
Lews Therin Avatar asked Jan 17 '23 04:01

Lews Therin


1 Answers

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>
like image 120
LPL Avatar answered Jan 18 '23 18:01

LPL