2011-09-21 105 views
0

一个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> 

感谢。

+0

我想我有一个答案。绑定IsSelected属性,然后可以读取该属性的值,如果为true,则返回真实文档,如果为false,则返回真实文档。这篇文章的观点有限,并且没有评论或答案,所以我会在几天后离开,然后删除帖子。它甚至会响应NotifyPropertyChanged并在选中选项卡时推送新内容 - 因为绑定是异步的,我担心它可能不会推送。 – Paparazzi

回答

0

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

相关问题