WPF选项卡项希望绑定仅在选择为True时发生

WPF选项卡项希望绑定仅在选择为True时发生,wpf,binding,tabitem,Wpf,Binding,Tabitem,一个TabItem的内容需要大量CPU才能创建。希望仅在IsSelected=True时通过TabItem的绑定获取内容。或者根据选择的True或False获取替代内容。在这种情况下,放弃IsAsync=True不是一个选项 下面的XAML可以工作,但无论IsSeleted=False还是IsSelected=True,它都会检索内容 <TabItem IsSelected="False" Header="Expensive Content"> <Fl

一个TabItem的内容需要大量CPU才能创建。希望仅在IsSelected=True时通过TabItem的绑定获取内容。或者根据选择的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,因为不能(直接)对FlowDocument使用IsAsync=True

绑定到要重定向的代码隐藏中的属性不起作用,因为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>


提前感谢。

所以我最后做的是获取文档文本和其他参数,以便在后台线程上标记它。然后,在UI线程上,如果选择了该选项卡,则检查TabIndex,如果选择了该选项卡,则仅生成FlowDocument。另一个选项卡显示文本的前4000个字符,因此用户可以快速决定是否要呈现完整的突出显示文档。

我想我有答案了。绑定IsSelected属性,然后可以读取该属性的值,如果为true,则返回真实文档;如果为false,则返回小占位符。这篇文章的观点有限,没有评论或答案,所以我将把它保留几天,然后删除这篇文章。当选择选项卡时,它甚至会响应NotifyPropertyChanged并推送新内容——因为绑定是异步的,我担心它可能不会推送。