2011-08-19 2 views
0

나는 SortableListView을 가지고 있는데 그 중 바인딩을 통해 ItemsSource를 설정했습니다. 다음과 같은 뭔가 :특수 항목을 listview에 추가하고 최상위에 보관하는 방법은 무엇입니까?

<SortableListView ItemsSource="{Binding Items}"> 
    <SortableListView.View> 
     <GridView> 
     <SortableGridViewColumn 
      Header="Name" 
      SortProperty="ProductName" 
      DisplayMemberBinding="{Binding ProductName}"/> 
     </GridView> 
    </SortableListView.View> 
    </SortableListView> 

윈도우 내가 초기화하고 ObservableCollection<Item> Items을 채우기 표시됩니다 때.

이제 특수 문자 하나를 목록 상단에 추가하고 정렬 순서에 관계없이 항상 첫 번째 항목으로 유지하고 싶습니다.

현재 나는 이것을 달성하기 위해 두 가지 방법을 생각할 수 있습니다

  1. 내가 특별한 아이템과 테마를 따라 모든 것을 처리 할 수있는 ListView를 추가 할 수 있습니다 내 ListView에 대한 아주 특별한 데이터 템플릿을 만듭니다.
  2. 헤더에 바인딩하고 click 이벤트를 처리하여 코드 숨김 파일에서 정렬을 수행하고 맨 위에 특수 항목을 삽입하십시오.

옵션 1은 너무 복잡하고 너무 복잡한 작업으로 보입니다. 옵션 2는 피하고 싶습니다.

누락 된 대안이 있습니까? 그렇지 않다면이 목표를 달성하기위한 최선의 선택은 무엇이며 어떻게 테마 옵션에 접근해야합니까?

답변

2

는 여기 추측을 데려 갈거야하지만 난 당신이 컨트롤을 사용하고 있으리라 믿고있어?

http://thejoyofcode.com/Sortable_ListView_in_WPF.aspx

때문에, 그것이 정렬있어 관리하기 위해 ICollectionView에를 사용하는 경우. ICollectionView는 매우 유연하며 여러 필드를 정렬 할 수 있습니다 (SQL의 경우 : SORT BY Field1 ASC, Field2 DESC).

사용자가 선택한 속성에 대한 설명을 추가하기 전에 추가 정렬 설명을 삽입하는 것으로 생각합니다. 이렇게하면 먼저 플래그가 지정된 항목별로 정렬 한 다음 선택한 속성 이름을 정렬합니다.

(기사 위에서 적응 코드)

private void Sort(string sortBy, ListSortDirection direction) 
{ 
    ICollectionView dataView = CollectionViewSource.GetDefaultView(this.ItemsSource); 

    if (dataView != null) 
    { 
     dataView.SortDescriptions.Clear(); 

     dataView.SortDescriptions.Add(new SortDescription("IsAtTop", ListSortDirection.Ascending)); 
     SortDescription sd = new SortDescription(sortBy, direction); 
     dataView.SortDescriptions.Add(sd); 
     dataView.Refresh(); 
    } 
} 

그래서 당신은 'IsAtTop'라는 개체에 부울 속성을 추가해야 할 것입니다.

희망이 당신이 필요로하는 것입니다 ....

실제로 데이터 소스의 사본 당신이 화면에 표시되는 목록으로 그의 SortableListView 컨트롤이 작동하지 않습니다 항목을 관리 할 수 ​​IColllectionView를 사용하는 경우
+0

현재 구현시 ICollectionView를 사용하지 않지만 재 작업 할 수 있습니다. 그래서 이것은 시작하기에 좋은 기초입니다. 감사. – Jensen

0

보기 모델에서 상단에 하나의 "특별"항목이 추가 된 목록을 반환하는 ObservableCollection<T>을 별도로 보관할 수 있습니다. CollectionChanged 이벤트를 원래 ObservableCollection<T>에 연결하여 컬렉션에서 PropertyChanged 알림을 호출 할 수 있다면 원하는 동작을 얻을 수 있습니다.

+0

, 사용자가 정렬 순서를 변경하기 위해 클릭 할 때 기본 ObservableCollection 의 정렬 순서가 그대로 유지됩니다. 따라서 바인딩하기 전에 올바른 순서로 가져온 경우에도 ICollectionView는 제공되는 정렬 설명에 따라 적합하다고 생각되는 항목을 정렬합니다. –

관련 문제