按ElementName设置DataTemplate

时间:2017-02-02 08:48:37

标签: c# wpf data-binding

我在将ContentControl绑定到ListboxItem时遇到了一些问题。

这是我的ListBox。

<ListBox x:Name="box">
     <ListBoxItem Tag="{x:Type vm:PART_FAMILY_ViewModel}" Content="Car"></ListBoxItem>
     <ListBoxItem Tag="{x:Type vm:PART_TYPES_ViewModel}" Content="Bike" IsSelected="True"></ListBoxItem>
</ListBox>

这是我的ContenControl:

<ContentControl Content="{Binding ElementName=box, Path=SelectedItem.Tag}">
    <ContentControl.Resources>

    <DataTemplate DataType="{x:Type vm:PART_FAMILY_ViewModel}">
        <v:PART_FAMILYS_View></v:PART_FAMILYS_View>
    </DataTemplate>

    <DataTemplate DataType="{x:Type vm:PART_TYPES_ViewModel}">
        <v:PART_TYPES_View></v:PART_TYPES_View>
    </DataTemplate>

    </ContentControl.Resources>
</ContentControl>

使用我的Elementname,我只在ContentControl中看到Tag DataType。

1 个答案:

答案 0 :(得分:1)

  

使用我的Elementname,我只在ContentControl中看到Tag DataType。

那是因为您将Tag属性设置为类型。您应该将其设置为DataTemplate类型的实例,以便按预期应用:

<ListBox x:Name="box">
    <ListBoxItem Content="Car">
        <ListBoxItem.Tag>
            <vm:PART_FAMILY_ViewModel />
        </ListBoxItem.Tag>
    </ListBoxItem>
    <ListBoxItem Content="Bike" IsSelected="True">
        <ListBoxItem.Tag>
            <vm:PART_TYPES_ViewModel />
        </ListBoxItem.Tag>
    </ListBoxItem>
</ListBox>