2017-11-27 5 views
1

가 나는 ItemsControl에 대한 항목을 생성하는 데 사용되는 뷰 모델이 있습니다이 CollectionViewSource가 열거 형의 ToString() 결과를 정렬하지 않는 이유는 무엇입니까?

public class PermissionItemViewModel 
{ 
    public PermissionsEnum Permission {get; set;} 
} 

열거 형 자체는 방식으로 정의 된 목록이 알파벳 순서로 자연스럽게 아님을, 제어는 항목을 렌더링 할 때 열거 형 정의와 같은 순서입니다.

제 생각에는 CollectionViewSource을 정의하고 본질적으로 myEnumValue.ToString() 인 항목을 정렬하려고합니다. 대신 정렬은 (내 생각 엔) 암시적인 ToString() 결과 대신에 enum 값의 순서대로되는 것 같습니다.

<CollectionViewSource x:Key="permissionsViewSource" 
         Source="{Binding PermissionItems}"> <!-- ObservableCollection<PermissionItemViewModel> --> 
    <CollectionViewSource.SortDescriptions> 
     <cm:SortDescription PropertyName="Permission" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

는 궁극적으로,이 같은 소스를 사용

<ItemsControl ItemsSource="{Binding Source={StaticResource permissionsViewSource}}" /> 

내가 그들의 값을 열거 형의 이름으로 정렬 할 싶습니다. 강제로 어떻게 할 수 있습니까?

답변

1

당신은 그것의 값에 대한 속성 이름을 걸릴 것 CollectionViewSource에 부착 된 행동으로이 글을 쓰는하여 양심을 조금 고약 수

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    CollectionViewSource source = (CollectionViewSource)(this.Resources["MyCollectionViewSource1"]); 
    ListCollectionView view = (ListCollectionView)source.View; 
    view.CustomSort = new CustomSorter(); 
} 

public class CustomSorter : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     var itemx = x as PermissionItemViewModel; 
     var itemy = y as PermissionItemViewModel; 

     return $"{itemx.Permission}".CompareTo($"{itemy.Permission}"); 
    } 
} 
you may be able to grab the ListCollectionView and do a custom sort on that.처럼 보인다. Offhand 나는 당신이 속성 변경 핸들러를 View에 설치하려고한다고 생각합니다. 나는 그와 같은 것을 한 번 쓴 것으로 생각하고, 내가 그것을 내쫓을 수 있는지 봅시다 ...

+0

예제가 있으면 도움이 될 것입니다. . 내가 직접 행동을 시도했지만 유효한 '보기'를 얻지 못했습니다. 그 행동의 모든 사건들은 그것이 성립되기 전에 시작되는 것처럼 보이므로 나는 분류자를 지정할 것이 아무것도 없다. – DonBoitnott

+1

긁힘. 사용할 수있는'CollectionViewSource'에는'Filter' 이벤트가 있습니다. 나는 단지 분류기를 한 번만 설정하기 위해 조건을 넣었으므로 제대로 작동하는 것 같습니다. 고마워, 에드. – DonBoitnott