2011-02-14 3 views
1

안녕하세요, 저는 ListBox 컨트롤에서 Caliburn Micro의 컬렉션을보기에 바인딩합니다. 여기 있습니다.알림 ICollectionView를 사용하여 BindableCollection의 항목을 업데이트하십시오.

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)를 알려주고 싶습니다.

답변

2

등급 열이있는 테이블이있는 응용 프로그램을 만들 때 동일한 문제가있었습니다. 등급을 변경할 때 행이 위로 이동하지 않는 이유가 궁금했고 결국에는 Refresh 메서드를 사용했습니다. 귀하의 예를 들어

:

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

다행히 성능 문제가 발생하지 않은, 그래서 지금은 비슷한 상황에서이 솔루션을 사용합니다.

+0

안녕하세요, 내가 사용하는이 솔루션에 대한 의견을 보내 주셔서 감사합니다,하지만 여기서 설명하는 문제가 발생합니다 : http://stackoverflow.com/questions/4986255/sort-and-group-listitems-in-a-wpf-listbox- 그룹 단위 축소 및 확장 –