У меня есть приложение WPF в .NET 3.5 SP1, которое использует TabControl
.
В этом случае у нас есть TabItems
, которые, в свою очередь, имеют свои Styles
для определения отображаемых в данный момент элементов.
Скажем, у нас нет в TabItem
имени Книги, теперь Книги будет иметь три этапа дисплея:
1. Загрузка результатов,
2. Отображение результатов,
3. не Отображение никаких результатов - то есть ничего не найдено.Как получить VisualChild из ControlTemplate
<TabControl>
<TabItem Header="Books"/>
<TabItem Header="DVD's"/>
...
</TavControl>
Теперь у меня есть 5 TabItems
, которые, скажем, представляют собой "DVD,", "Blu-Rays", "компакт-диск", "Книги" и "Комиксы".
<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
в Control
, так как это текущее содержимое TabItem
.
Я пробовал TabControl.SelectedItem, SelectedValue и до сих пор не могу найти Current ItemsSource.Count.
Заранее спасибо
UPDATE:
Я попробовал оба раствора большое спасибо @Sheridan и @pushpraj!
К сожалению, я не использовал любой из них, вместо этого я использовал ListView внутри TabItem
, а затем к нему доступ с помощью этого кода:
<TabControl Name="Tc">
<TabItem><ListView ItemsSource="{Binding Books}"/></TabItem>
...
</TabControl>
<TextBlock Text="{Binding ElementName=Tc, Path=SelectedItem.Content.Items.Count}"/>
Таким образом, содержание моей TextBlock меняется каждый раз, когда пользователь выбирает другую вкладку.
P.S. Тем не менее я бы не сделал этого без оценки обоих ответов.
Я хотел бы предложить, чтобы пойти связывание пути данных. во-вторых, чтобы получить количество элементов, вы можете использовать 'Items.Count' в TabControl. ItemsSource.Count работает только при наличии свойства Count в источнике элементов, например IEnumarable не имеет. – pushpraj
Спасибо за быстрый ответ, но когда я использую 'TabControl.Items.Count', я получаю число TabItems, а не число результатов, возвращаемых из БД. – XAMlMAX
Вы хотите количество книг? возможно, привязка к '{Binding Books.Count}' может помочь вам получить желаемое. – pushpraj