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

1

5

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

Transmigrate answered 4/7, 2012 at 19:44 Comment(0)
A
10

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>
Asur answered 4/7, 2012 at 19:48 Comment(6)
Try setting the DataTemplates in Window.Resources.Asur
DataContext in the constructor is still null.Transmigrate
In View constructor? I think DataContext will be set later.Asur
Oh damn.. let me see if I can subscribe to the DataContextChangedEventTransmigrate
You were right. It was set later. Ugh. Subscribing to DataContextChangedEvent seemed to do the trickTransmigrate
DataContextChangedEvent solves this problem! Many thanks!Zellazelle

© 2022 - 2024 — McMap. All rights reserved.