【问题标题】:WPF ContentControl inside of TabControl does not show DataTemplatesTabControl 内的 WPF ContentControl 不显示 DataTemplates
【发布时间】:2022-01-11 03:16:26
【问题描述】:

我有一个 ListView,它有 TabControl,它显示 2 种类型的视图。

  <ListView x:Name="Devices" ItemsSource="{Binding Devices}">
            <ListView.Resources>
                <DataTemplate DataType="{x:Type app:DeviceViewModel}">
                    <Expander Header="{Binding Type}">
                        <StackPanel Orientation="Vertical">
                            <ContentControl>
                                <ContentControl.Resources>
                                    <DataTemplate DataType="{x:Type app:DeviceAViewModel}">
                                        <local:DeviceAView/>
                                    </DataTemplate>
                                    <DataTemplate DataType="{x:Type app:DeviceBViewModel}">
                                        <local:DeviceBView/>
                                    </DataTemplate>
                                </ContentControl.Resources>
                            </ContentControl>
                            <TabControl x:Name="Channel"  ItemsSource="{Binding Channels}" DisplayMemberPath="Index">
                                <TabControl.ContentTemplate>
                                    <DataTemplate>
                                        <ContentControl> 
                                            <ContentControl.Resources> <------ this part does't work
                                                <DataTemplate DataType="{x:Type app:ChannelAViewModel}">
                                                    <local:ChannelAView DataContext="{Binding}"/>
                                                </DataTemplate>
                                                <DataTemplate DataType="{x:Type app:ChannelBViewModel}">
                                                    <local:ChannelBView DataContext="{Binding}"/>
                                                </DataTemplate>
                                            </ContentControl.Resources>
                                        </ContentControl>
                                    </DataTemplate>
                                </TabControl.ContentTemplate>
                            </TabControl>
                        </StackPanel>
                    </Expander>
                </DataTemplate>
            </ListView.Resources>
        </ListView>

每个标签项的内容只是空的,而不是显示匹配的频道视图。

如果我删除整个 树它确实会在 tabitem 内容中显示匹配的对象字符串。

知道为什么它不显示数据模板吗?

谢谢。

【问题讨论】:

  • 如果你删除DisplayMemberPath="Index"会怎样?
  • 我试过了,还是不显示内容。

标签: wpf datatemplate tabitem


【解决方案1】:

尝试像这样 Listview 项目模板。 像这样:

<ListView x:Name="Devices" ItemsSource="{Binding Devices}">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <StackPanel Orientation="Vertical">
                            <StackPanel Orientation="Vertical">
                                <ContentControl>
                                </ContentControl>
                                <TabControl x:Name="Channel"  ItemsSource="{Binding Channels}">
                                </TabControl>
                            </StackPanel>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

或者这个:

<ListView x:Name="Devices" ItemsSource="{Binding Devices}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Vertical">
                    <ContentControl>
                    </ContentControl>
                    <TabControl x:Name="Channel"  ItemsSource="{Binding Channels}">
                    </TabControl>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【讨论】:

    【解决方案2】:

    好的,我想通了。 我必须将 Content={Binding} 添加到 ContentControl 或者我可以删除它,而不是使用 TabControl.ContentTemplate 我将 DataTemplates 放在 TabControl.Resources 中,它工作正常。

     <TabControl x:Name="Channel"  ItemsSource="{Binding Channels}" DisplayMemberPath="Index">
                                <TabControl.Resources>
                                    <DataTemplate DataType="{x:Type app:ChannelAViewModel}">
                                        <local:ChannelAView DataContext="{Binding}"/>
                                    </DataTemplate>
                                    <DataTemplate DataType="{x:Type app:ChannelBViewModel}">
                                        <local:ChannelBView DataContext="{Binding}"/>
                                    </DataTemplate>
                                </TabControl.Resources>
                            </TabControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多