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