У меня есть ListBox
, который выглядит следующим образом:
<ListBox ItemsSource="{Binding Selected_Cust.Associated_Letters, Mode=OneWay}"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemTemplate>
<DataTemplate>
<!-- template code here -->
</DataTemplate>
</ListBox>
И Selected_Cust
это:
private Customer _Selected_Cust;
public Customer Selected_Cust
{
get { return _Selected_Cust; }
set
{
_Selected_Cust= value;
RaisePropertyChanged("Selected_Cust");
}
}
Мой Customer
класс - это POCO, и Associated_Letters
это свойство: public List<Letter> Associated_Letters { get; set; }
У меня есть некоторые функции для сортировки Associated_Letters
на месте: Selected_Cust.Associated_Letters.Sort((x, y) => x.Customer_Name.CompareTo(y.Customer_Name));
Сортировка работает, однако изменение не отражается в ListBox
пока каждый отображаемый в данный момент ListBoxItem
не прокручивается из поля зрения все новые элементы отображаются в соответствии с порядком сортировки.
Я подозревал, что это связано с VirtualizingStackPanel.VirtualizationMode="Recycling"
, но я не уверен на 100%. Я удалил это из своего xaml, и это все еще произошло, но я также не увидел какого-либо падения производительности, которого я ожидал (и испытывал раньше), поэтому я думаю, что он все еще использует этот режим, несмотря на то, что он нигде не был установлен явно.
Еще одна вещь, возможно, не связанная с этим, заключается в том, что я часто получаю эти ошибки привязки данных при прокрутке моего ListBox:
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=(0); DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'ClearTypeHint' (type 'ClearTypeHint')
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
Однако это не вызывает никаких заметных проблем.
Как я могу убедиться, что мой ListBox
сразу же обновляется при сортировке?