我有一个 .NET 3.5 SP1 中的 WPF 应用程序,它使用 TabControl
。
其中我们有 TabItems
,而 TabItems 又具有其 Styles
来确定当前显示的项目。
假设我们有一个名为 Books 的 TabItem
,现在 Books 将具有三个显示阶段:
1. 加载结果,
2. 显示结果,
3. 未显示任何结果 - 即未找到任何内容。
<TabControl>
<TabItem Header="Books"/>
<TabItem Header="DVD's"/>
...
</TavControl>
现在我有 5 个 TabItems
,可以说它们代表“DVD”、“蓝光”、“CD”、“书籍”和“漫画”。
<TabItem Header="Books">
<Control>
<Control.Resources>
<Style TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Control">
<ListView ItemsSource="{Binding Books}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- Assign different Visuals depending on the current state of the app, i.e. Loading, No results, results found
<DataTrigger .../>
</Style.Triggers>
</Style>
</Control.Resources>
</Control>
</TabItem>
在TabItem
下面,我有一个TextBlock
来显示当前找到的结果的数量:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Displaying {0} records for your Shop ({1})" Converter="{StaticResource tstMVC}">
<Binding ElementName="Tc" Path="SelectedValue"/>
<Binding Path="ShopId" FallbackValue="Liverpool"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
转换器可供我检查 MultiBinding
中传递的值。
问题:
当用户选择选项卡项目时,我想显示所显示项目的当前数量,但我无法在中找到
,因为这是 ListView
>ControlTabItem
的当前内容。
我已经尝试过 TabControl.SelectedItem、SelectedValue 但仍然找不到 Current ItemsSource.Count。
提前致谢
更新:
我已经尝试了这两种解决方案,非常感谢@Sheridan 和@pushpraj!
不幸的是,我没有使用它们中的任何一个,而是在 TabItem
内部使用 ListView,然后使用以下代码访问它:
<TabControl Name="Tc">
<TabItem><ListView ItemsSource="{Binding Books}"/></TabItem>
...
</TabControl>
<TextBlock Text="{Binding ElementName=Tc, Path=SelectedItem.Content.Items.Count}"/>
这样,每次用户选择不同的选项卡时,我的 TextBlock 的内容都会发生变化。
P.S. 尽管如此,如果没有对这两个答案进行评估,我就不会这样做。
最佳答案
如果您的所有实体都有单独的集合类,您可以使用以下方法
为您的集合类定义数据模板
例如
<DataTemplate DataType="{x:Type l:BookCollection}">
<ListView ItemsSource="{Binding}" />
</DataTemplate>
xaml
<TabControl x:Name="Tc">
<TabItem Header="Books"
Content="{Binding Books}" />
<TabItem Header="DVD's"
Content="{Binding DVDs}" />
</TabControl>
或者如果您没有单独的集合,则按如下方式使用 DataTemplate
<TabControl x:Name="Tc">
<TabControl.ItemTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabItem Header="Books"
Content="{Binding Books}" />
<TabItem Header="DVD's"
Content="{Binding DVDs}" />
</TabControl>
那么获取所选选项卡项目计数的绑定(bind)将是
<TextBlock Text="{Binding SelectedItem.Content.Count, ElementName=Tc}" />
关于wpf - 如何从 ControlTemplate 检索 VisualChild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25844872/