GrayFox
GrayFox

Reputation: 1089

ItemTemplate definition in another UserControl

I have the following usercontrol to define my general control-layout:

<UserControl>
    <DockPanel LastChildFill="False">
        <ListView DockPanel.Dock="Left"
                  ItemsSource="{Binding FoundResults}"
                  SelectedItem="{Binding SelectedItem}"
                  ItemTemplate="{DynamicResource FoundResultsStyle}"/>
        <ContentControl DockPanel.Dock="Top"
                        Name="WinSock"
                        Content="{Binding ElementName=BaseWindowUserControl, Path=SpecificView}" />
        <StatusBar DockPanel.Dock="Bottom">
            <StatusBarItem Content="{Binding StatusBarText, Mode=OneWay}" />
        </StatusBar>
    </DockPanel>
</UserControl>

Every window should have a ListView on the left side as you can see.

I need a way to define the ItemTemplate in the concrete userControl.

Person-Usercontrol:

<UserControl.Resources>
    <DataTemplate x:Key="FoundResultsStyle" DataType="{x:Type Pocos:Person}">
       <StackPanel>
            <TextBlock Text="{Binding Lastname}"/>
            <TextBlock Text="{Binding Firstname}"/>
       </StackPanel>
    </DataTemplate>
</UserControl.Resources>

The ListView doesn't use my Template which I have defined in my 'concrete' usercontrol. Is there a way to achieve this?

Thank you in advance!

Upvotes: 1

Views: 82

Answers (1)

PScr
PScr

Reputation: 459

Can you do something like this, so that the DataType, as it changes, will select the correct template?

<UserControl>

    <UserControl.Resources> 
        <DataTemplate DataType="{x:Type Pocos:Person}"> 
             ...
        </DataTemplate>
        <DataTemplate DataType"{x:Type Pocos:Dog}">
            ...
        </DataTemplate>
    </UserControl.Resources>


    <DockPanel LastChildFill="False">
        <ListView 
          DockPanel.Dock="Left"
          ItemsSource="{Binding FoundResults}"
          SelectedItem="{Binding SelectedItem}"/>
        <ContentControl 
          DockPanel.Dock="Top"
          Name="WinSock"
          Content="{Binding ElementName=BaseWindowUserControl, Path=SpecificView}" />
        <StatusBar DockPanel.Dock="Bottom">
            <StatusBarItem Content="{Binding StatusBarText, Mode=OneWay}" />
        </StatusBar>
    </DockPanel>

</UserControl>

Upvotes: 1

Related Questions