一个TabItem的内容是需要创建的大型CPU。希望只在IsSelected = True时通过绑定TabItem来获取内容。或者根据IsSelected True或False获取备用内容。在这种情况下放弃IsAsync = True不是一种选择。WPF TabItem Desire绑定仅在发生IsSelected时发生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 =真(直接地)与的FlowDocument使用。
绑定到重定向后面的代码中的属性不起作用,因为具有IsAcync = True的UI在另一个线程上,并且无法访问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>
感谢。
我想我有一个答案。绑定IsSelected属性,然后可以读取该属性的值,如果为true,则返回真实文档,如果为false,则返回真实文档。这篇文章的观点有限,并且没有评论或答案,所以我会在几天后离开,然后删除帖子。它甚至会响应NotifyPropertyChanged并在选中选项卡时推送新内容 - 因为绑定是异步的,我担心它可能不会推送。 – Paparazzi