0
我有一個ItemsControl顯示消息列表。它被定義爲...ItemsControl項目綁定調用時崩潰
<ItemsControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding Messages}" >
</ItemsControl>
然後我有一個DataTemplate處理每個消息的顯示。它被定義爲...
<DataTemplate DataType="{x:Type vm:MessageViewModel}">
<Button Command="{Binding CommandOpenPage}">
<Button.Template>
<ControlTemplate>
<Border Margin="2" BorderThickness="1"
BorderBrush="{Binding Flags, Converter={StaticResource msgFlagConverter}}"
Background="{Binding Flags, Converter={StaticResource msgFlagConverter}, ConverterParameter=1}" >
<TextBlock Text="{Binding Path=Message}" Style="{StaticResource ActionItem}" TextWrapping="Wrap" />
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
一切都顯示OK。我的問題是當父控件設置爲可見性=摺疊我的ItemsControl仍然通過DataTemplate併爲每個MessageViewModel調用BorderBrush和BackgroundBrush的轉換器。
這很麻煩,因爲當列表非常大時,會設置綁定並在不應該轉換的時候執行轉換。該列表僅在用戶選擇查看時纔可見。我瞭解綁定引擎會忽略摺疊父項下的元素。這個規則是否有例外?或者我只是想念一些東西?
我已經試過你的代碼,我沒有得到所謂的轉換器。確保你沒有改變視圖模型,特別是消息數據,或者你沒有改變數據上下文(重新設置)等。 – frno
使用ListBox代替,你將啓用虛擬化。即使你有5K項目,也只有10個將被顯示,並且它們的轉換器將被調用。 –
frno - 在驗證期間,消息列表確實發生了很大變化。如果父元素被摺疊,我仍然期望綁定被忽略。 – Jayson