【问题标题】:WPF TabItem Desire Binding to Only Occur When IsSelected TrueWPF TabItem 希望绑定仅在 IsSelected True 时发生
【发布时间】:2011-11-22 03:24:18
【问题描述】:

创建一个 TabItem 的内容很大,CPU 开销很大。当 IsSelected = True 时,只想通过绑定 TabItem 来获取内容。或者根据 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 的 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,则返回一个小占位符。这篇文章的浏览量有限,没有 cmets 或答案,所以我将把它搁置几天,然后删除该帖子。它甚至会响应 NotifyPropertyChanged 并在选择选项卡时推送新内容 - 因为绑定是异步的,我担心它可能不会推送。

标签: wpf binding tabitem


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2013-08-04
    • 2013-02-01
    • 1970-01-01
    相关资源
    最近更新 更多