1

こんにちは私はビューのリストボックスコントロールでCaliburnMicroからのコレクションをバインドします。はい、これ。

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

ここで、Friendsコレクションの変更についてコレクションビュー(_currentView)に通知します。

4

1 に答える 1

2

[評価]列のあるテーブルを持つアプリケーションを作成したときにも同じ問題が発生しました。レーティングを変更しても行が上がらないのはなぜかと思い、最終的にはこのRefresh方法を使用しました。

あなたの例のために:

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

幸い、パフォーマンスの問題は発生しなかったので、今では同様の状況でこのソリューションを使用しています。

于 2011-02-14T14:26:57.183 に答える