2011-11-13 77 views
0

我通過設置樣式DataTrigger並將其綁定到IValueConverter(CheckForShade)來有條件地格式化列表視圖,如果應用樣式,則返回該樣式。在WPF中多線程樣式DataTrigger IValueConverter

<Style.Triggers>  
      <DataTrigger Binding="{Binding Converter={StaticResource CheckForShade}}" Value="false" > 
       <Setter Property="Background" Value="Red" /> 
      </DataTrigger> 
</Style.Triggers> 

的問題是,包含在所述的IValueConverter邏輯是相當密集的,我希望某種方式向多線程它,以便在列表視圖的每一行可用於在同一時間,並在格式化來評價線程以外的UI線程。

此外,它目前減慢應用程序打開時,它檢查列表視圖的所有行並應用格式,我想延遲格式檢查,直到用戶界面已加載,然後多線程每行。

+0

轉換器在UI線程中運行:http://stackoverflow.com/questions/6865912/how-wpf-converters-are-executed –

回答

3

您可以嘗試使用與IsAsync設置爲true的綁定,然後指定fallback值爲false:請參閱http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx

或者,PriorityBinding具有最高優先級和默認綁定的是優先級較低的返回false您CheckForShade轉換器:http://msdn.microsoft.com/en-us/library/system.windows.data.prioritybinding.aspxPriorityBinding的好處是,它讓聆聽爲綁定列表中的更高屬性的更改。這樣你可以這樣實現你的轉換器:

  • 創建一個工作線程來計算你的布爾值,並把它們放在一個靜態字典中。
  • 實現您的轉換器以查看結果是否準備就緒(例如,在字典上使用TryGetValue)。
  • 如果結果準備就緒,請將其退回。否則,返回DependencyProperty.UnsetValue