使用notify ICollectionView更新BindableCollection中的项目

时间:2011-02-14 12:06:04

标签: wpf listbox caliburn notify icollectionview

您好我在ListBox控件上绑定了来自Caliburn Micro的集合。就是这样。

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[0].TextStatus = "Ofline" -> is in offline group

我改变了网上的价值;

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

在这里我想要关于Friends集合的更改的通知集合视图(_currentView)。

1 个答案:

答案 0 :(得分:2)

当我创建一个包含Rating列的表的应用程序时,我遇到了同样的问题。 我想知道为什么当我改变评级时行不会向上移动,最后我使用Refresh方法。

对于你的例子:

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

幸运的是,没有出现性能问题,所以现在我在类似情况下使用此解决方案。