Обновить элемент в BindableCollection с уведомлением ICollectionView - PullRequest
1 голос
/ 14 февраля 2011

Привет, я связываю коллекцию от Caliburn Micro в представлении управления ListBox.Вот оно.

public BindableCollection<UserInfo> Friends
{
    get { return _friends; }
    set
    {
        _friends = value;
        NotifyOfPropertyChange(() => Friends);
    }
}

Элементы ListBox - это тип UserInfo.

Привет, я сортирую и группирую элементы списка, я использую CollectioView для этой цели.

При инициализации ListBox я сортирую и группирую элементы этим методом.

private ICollectionView _currentView;

//...

private void SortContactList()
{
    _currentView = CollectionViewSource.GetDefaultView(Friends);

    _currentView.GroupDescriptions.Add(new PropertyGroupDescription("TextStatus"));

    _currentView.SortDescriptions.Add(new SortDescription("TextStatus", ListSortDirection.Ascending));

    _currentView.SortDescriptions.Add(new SortDescription("Nick", ListSortDirection.Ascending));
}

TextStatusи Nick являются свойствами класса userInfo.

Когда я обновляю значения элемента в привязываемой коллекции Friend, мне бы хотелось, чтобы был способ уведомления представления коллекции об этом изменении.Потому что мне нужно переместить элемент в нужную / хорошую группу.

например

Friend[0].TextStatus = "Ofline" -> is in offline group

Я изменяю значение в Интернете;

Friend[0].TextStatus="Online" -> move in online group

и здесь я хочу уведомить представление коллекции (_currentView) об изменении коллекции друзей.

1 Ответ

2 голосов
/ 14 февраля 2011

У меня была такая же проблема, когда я создавал приложение, в котором была таблица со столбцом Рейтинг.Я удивился, почему строка не двигается вверх, когда я меняю рейтинг, и в конце концов я использовал метод Refresh.

Для вашего примера:

Friend[0].TextStatus="Online" -> move in online group
_currentView.Refresh();

К счастью, проблемы с производительностью не исчезлине происходит, поэтому сейчас я использую это решение в подобных ситуациях.

...