WPF TabControl сохраняет выбранную вкладку при изменении SelectedObject - PullRequest
0 голосов
/ 05 мая 2020

Я использую WPF TabControl и получил простой вопрос (надеюсь).

У меня есть список элементов, и для каждого элемента есть сведения, отображаемые в TabControl с 3 вкладками.

<TabControl Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4" ItemsSource="{Binding SelectedLibrary.DetailViewModels}" IsSynchronizedWithCurrentItem="False">
  <TabControl.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Name}" />
    </DataTemplate>
  </TabControl.ItemTemplate>

  <TabControl.Resources>
    <DataTemplate DataType="{x:Type provider:PropertyPageViewModel}">
      <dxprg:PropertyGridControl
        ReadOnly="True"
        ShowProperties="WithPropertyDefinitions"
        ExpandCategoriesWhenSelectedObjectChanged="True"
        ShowCategories="Hidden"
        ShowMenuButtonInRows="False"
        ShowToolPanel="False"
        ValueColumnWidth="2*"
        ShowSearchBox="False"
        SelectedObject="{Binding FunctionBaseData.Function, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
        <dxprg:PropertyDefinition Path="Name" Header="{x:Static fpProperties:Resources.PropertyGridHeaderName}" />
        <dxprg:PropertyDefinition Path="Id" Header="{x:Static fpProperties:Resources.PropertyGridHeaderId}"   />
        <dxprg:PropertyDefinition Path="Type" Header="{x:Static fpProperties:Resources.PropertyGridHeaderType}" />
        <dxprg:PropertyDefinition Path="Category" Header="{x:Static fpProperties:Resources.PropertyGridHeaderCategory}"  />
        <dxprg:PropertyDefinition Path="Version" Header="{x:Static fpProperties:Resources.PropertyGridHeaderVersion}"/>
        <dxprg:PropertyDefinition Path="LastModified" Header="{x:Static fpProperties:Resources.PropertyGridHeaderLastModified}" />
      </dxprg:PropertyGridControl>
    </DataTemplate>
    <DataTemplate DataType="{x:Type provider:PreviewPageViewModel}">
      <TextBlock Text="PreviewPage"></TextBlock>
    </DataTemplate>
    <DataTemplate DataType="{x:Type provider:CodePageViewModel}">
      <TextBlock Text="SourcePage"></TextBlock>
    </DataTemplate>
  </TabControl.Resources>
</TabControl>

Это работает.

Когда пользователь выбирает другой элемент в списке, SelectedObject моей вкладки изменяется, это нормально. Но выбранная вкладка также изменяется. Я хочу, чтобы выбранная вкладка оставалась такой же, как и для предыдущего элемента.

Я пробовал это IsSynchronizedWithCurrentItem="True", но это не помогло. Скажите, пожалуйста, есть ли свойство, которое я могу легко настроить для WPF TabControl.

Спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Я не думаю, что есть способ сделать это только для XAML. Все "выбранные" свойства (SelectedItem, SelectedIndex, et c.) Всегда будут сбрасываться при изменении ItemsSource.

Вам нужно будет записать значение TabControl ' s SelectedIndex перед изменением, затем верните это значение после изменения. Не видя остальной части вашего кода, я не мог сказать вам, где именно выполнять эти шаги. Запись может быть выполнена в SelectedLibrary.DetailViewModels как часть установщика или в любом другом коде, который выполняет настройку. Сброс SelectedIndex может быть выполнен на SelectionChanged.

...