SortDescription и автоматическое обновление отсортированного заказа - PullRequest
5 голосов
/ 10 сентября 2011

Когда я изменил значение элемента, который связан в списке, я ожидал, что отсортированный порядок должен измениться автоматически.

Но это не так.

Могу ли я назвать .SortDescription.Метод Clear () и перераспределение SortDescription в этом случае?

.Refresh () не работает.

EDITED

я связан и установлентакие данные;

public Records myRecents;


....

//lbToday is a ListBox.
//ModifiedTime is a DateTime.
this.lbToday.ItemsSource = new ListCollectionView(myRecents);
this.lbToday.Items.SortDescriptions.Add(new SortDescription("ModifiedTime", ListSortDirection.Descending));

Когда приложение запускалось впервые, оно показывало правильный результат.Но когда я изменяю значение элемента (в данном случае, свойство ModifiedTime), представление не изменяется.И я перезапустил приложение, оно снова показало правильный результат.

EDITED2

Вот исходный код Records.

public class Records : ObservableCollection<RecordItem>
{
    public Records() { }

}

и вот исходный код 'RecordItem'

public class RecordItem : INotifyPropertyChanged
{

    string queryString; public string QueryString { get { return queryString; } set { queryString = value; Notify("QueryString"); } }

    DateTime modifiedTime; public DateTime ModifiedTime { get { return modifiedTime; } set { modifiedTime = value; Notify("ModifiedTime"); } }


    public RecordItem() { }
    public RecordItem(string qStr)
    {
        this.queryString = qStr;
        this.modifiedTime = DateTime.Now;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void Notify(string propName) { if (this.PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } }

}

Примечание

Когда я добавил элемент в myRecents (класс Record),это работает хорошо.Возникла проблема только при изменении свойства.

Ответы [ 2 ]

6 голосов
/ 10 сентября 2011

Взгляните на эту статью от доктора WPF: ItemsControl: 'E' для редактируемой коллекции

Это должно помочь вам с вашей проблемой.

1 голос
/ 09 ноября 2018

.NET 4.5 добавил два новых свойства в ListCollectionView, который является реализацией по умолчанию для ListBox и CollectionViewSource.View.

Чтобы иметь прямую сортировку для вашего свойства ModifiedTime, добавьте его в LiveSortingProperties и включите IsLiveSorting.

list.SortDescriptions.Add(new SortDescription("ModifiedTime", ListSortDirection.Ascending));
list.IsLiveSorting = true;
list.LiveSortingProperties.Add("ModifiedTime");

Это должно пересортировать список при изменении ModifiedTime.Это дает дополнительное преимущество - не обновлять весь вид!

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