ListBox не обновляется при сортировке связанного ItemSource - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть 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 сразу же обновляется при сортировке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...