Содержимое одного TabItem является большим процессором, дорогим для создания. Хотел бы получать содержимое только через привязку для TabItem, когда IsSelected = True. Или получить альтернативный контент на основе IsSelected True или False. Отказ от IsAsync = True в этом случае не вариант.
XAML, приведенный ниже, работает, но извлекает содержимое независимо от того, IsSeleted = False или IsSelected = True.
<TabItem IsSelected="False" Header="Expensive Content">
<FlowDocumentReader Name="FlowDocumentPageViewer1" HorizontalAlignment="Stretch" DataContext="{Binding Source={x:Static Application.Current}}">
<FlowDocumentReader.Document>
<Binding Path="MyGabeLib.Search.SelectedDoc.XAMLdocFlowDocument" IsAsync="True" Converter="{StaticResource flowDocumentToXamlConverter}"
FallbackValue="{StaticResource DefaultFlowDoc}" Mode="OneWay"/>
</FlowDocumentReader.Document>
</FlowDocumentReader>
</TabItem>
Преобразователь должен преобразовать строку (сериализованную с использованием XamlWriter.Save (DocFlowDocument)) обратно в FlowDocument, поскольку не может использовать IsAsync = True (напрямую) с FlowDocument.
Привязка к свойству в коде для перенаправления не работает, поскольку пользовательский интерфейс с IsAcync = True находится в другом потоке и не имеет доступа к IsSelected.
Хотел использовать шаблон с триггером, но это насколько я понял. Не очень далеко, но это не вызывает синтаксическую ошибку.
<TabItem IsSelected="False" Name="TabItemFlowDoc">
<FlowDocumentReader ...>
<FlowDocumentReader.Template>
<ControlTemplate>
</ControlTemplate>
</FlowDocumentReader.Template>
</FlowDocumentReader>
Попробовал триггер прямо на TabControl и даже не смог пройти мимо синтаксических ошибок
<TabControl Grid.Row="0" Grid.Column="0" Name="TabControlView">
<TabControl.Resources>
<DataTemplate>
<FlowDocumentReader.Template>
</FlowDocumentReader.Template>
</DataTemplate>
</TabControl.Resources>
Заранее спасибо.