Как привязать к Tabcontrol.Items - PullRequest
       0

Как привязать к Tabcontrol.Items

0 голосов
/ 03 ноября 2011

У меня есть приложение WPF, которое я пытаюсь динамически добавлять элементы в tabcontrol.У меня есть список пунктов меню, которые должны быть привязаны к элементам tabcontrol.Единственная проблема заключается в том, что TabControl.Items не уведомляет других о добавлении элементов.Я проверил это, связав вместо этого TabControl.Items.Count и получая вызовы к конвертеру (но переданное значение - это число, а не что-то полезное).Вот соответствующий код, который не получает привязку данных должным образом, потому что Items не вызывает обновления:

<MenuItem ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=Items, Converter={StaticResource TabControlItemConverter}}">

Этот XAML MenuItem находится внутри ControlTemplate для TabControl.Со статическими элементами, то есть элементами, которые уже определены в TabControl, этот код работает отлично.Но у меня есть TabControl, который добавляет элементы во время выполнения и не может обновить эту привязку.Кто-нибудь добавил какое-либо свойство в TabControl, которое может связываться с коллекцией Items?

Изменить для фоновой информации TabControl, к которому добавлены элементы, является регионом (это приложение Prism).Вот соответствующий XAML

<TabControl cal:RegionManager.RegionName="{x:Static local:LocalRegionNames.SelectedItemRegion}" >
            <TabControl.Resources>
                <Style TargetType="TabItem" BasedOn="{StaticResource TabItemStyle}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Style="{StaticResource tabItemImage}" Height="20" />
                                    <TextBlock Text="{Binding Content.DataContext.TabHeader, RelativeSource={RelativeSource AncestorType=TabItem}}" VerticalAlignment="Center" />
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TabControl.Resources>
        </TabControl>

Соответствующий код для добавления вида в регион находится здесь:

ProjectDetailView view = new ProjectDetailView();
ProjectDetailViewModel viewModel = new ProjectDetailViewModel();
viewModel.CurrentProject = project;
view.DataContext = viewModel;



 IRegionManager retManager = RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Add(view, null, true);
   RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Activate(view);

Все это работает нормально ... представления добавляются, вкладка управлениядобавляет элементы, и появляются виды.Но свойство Items на tabcontrol никогда не передает изменения в свою коллекцию.

1 Ответ

1 голос
/ 03 ноября 2011

Вы делаете то же самое для TabControls, вы связываете ItemsSource, единственное, что вам нужно учитывать, это то, что исходная коллекция должна реализовывать INotifyCollectionChanged, если вы хотите ее обновитьесли элементы добавлены.ObservableCollection<T> уже реализует интерфейс и часто используется в качестве источника для таких привязок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...