Заголовок TabControl не выбран при изменении SelectedIndex - PullRequest
0 голосов
/ 06 декабря 2018

Сначала я нашел этот ответ и сначала подумал, что он решил мою проблему: Привязка к TabControl SelectedIndex

На скриншотах заголовка вкладки в этом посте показано, что я вижу смои вкладки.

В частности, добавление проверки if (value! = _SelectedTabIndex) перед обновлением свойства и поднятие уведомления PropertyChanged, похоже, работало.Под этим я имею в виду, что моя первая добавленная вкладка отображалась правильно (с выбранным заголовком).

Однако это работает только для первого элемента, добавленного в TabControl.Когда я добавляю второй элемент, не выбирается ни первый, ни второй заголовок, однако второй элемент виден в теле вкладки, что означает, что он вроде работает.

Вот мой XAML:

<TabControl Grid.Row="1" Grid.Column="2" ItemsSource="{Binding TabViewModels}"
            SelectedIndex="{Binding SelectedTabIndex, Mode=OneWay}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding TabName}" />
            <Setter Property="Content" Value="{Binding}" />
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

Вот мой обработчик CollectionChanged:

private void OnTabCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    // Set selected index to last index in collection
    SelectedTabIndex = TabViewModels.Count - 1;
}

А вот моя собственность:

private int _SelectedTabIndex;
public int SelectedTabIndex
{
    get { return _SelectedTabIndex; }
    set
    {
        if(value != _SelectedTabIndex)
        {
            _SelectedTabIndex = value;
            OnPropertyChanged();
        }
    }
}

1 Ответ

0 голосов
/ 07 декабря 2018

Хорошо, я обнаружил, в чем проблема, но я не знаю лучшего решения.Событие CollectionChanged возникает до того, как TabControl обновляется новыми элементами.Это означает, что установка SelectedTabIndex на последний элемент на короткий момент выходит за пределы (до обновления элементов TabControl).

Последовательность выглядит следующим образом: 1. Добавить элемент в коллекцию 2. Событие CollectionChangedподнято 3. SelectedTabIndex устанавливается на последний элемент (TabControl еще не добавил недавно добавленный элемент). 4. Элементы TabControl обновляются

Я доказал это, создав задачу в обработчике события CollectionChanged, который задерживается на 10 мс,затем устанавливает SelectedTabIndex, но это выглядит небрежно.

...