2013-11-07 8 views
1

Можно ли сделать условную сортировку для источника представления коллекции WPF?Условно-то WPF CollectionViewSource

<CollectionViewSource x:Key="MyCVS" Source="{Binding MyData}"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="MyProperty1" Direction="Ascending" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

Я хочу сортировать по MyProperty1 при некоторых условиях и MyProperty2 при некоторых других условиях. Я могу сделать это в коде. Но я бы предпочел сделать это сам Xaml, если это возможно.

Что-то вроде, если «MySortCondition» истинно, тогда сортируйте по MyProperty1, если не сортировать по MyProperty2.

Благодаря

ответ

0

Не могли бы вы написать конвертер, чтобы изменить свой MySortCondition в соответствующий SortDescription объект (возможно, придется сделать SortDescriptionCollection самостоятельно в преобразователе ...)?

0

Unfortunatly SortDescriptions не очень настраиваемые как tey stucts и не могут быть получены, чтобы добавить эту логику, поэтому код позади будет вашим лучшим вариантом.

var cvs = FindResource("MyCVS") as CollectionViewSource; 
    cvs.SortDescriptions.Clear(); 
    if (condition) 
    { 
     cvs.SortDescriptions.Add(new SortDescription("Property1", ListSortDirection.Ascending)); 
    } 
    else 
    { 
     cvs.SortDescriptions.Add(new SortDescription("Property2", ListSortDirection.Ascending)); 
    } 

Или ... Если оба свойства одного и того же типа простой способ будет создать свойство сортировки в классе и использовать его в SortDescription

Пример:

public int SortProperty 
{ 
    get 
    { 
     if (condition) 
     { 
      return Property1; 
     } 
     return Property2; 
    } 
} 

Но в большинстве случаев легче отсортировать базовую коллекцию с использованием Linq

public List<Type> MyData 
{ 
    get 
    { 
     return _data.OrderBy(x => ......... 
    } 
} 
+0

Спасибо за ваше время. Тип будет отличаться для них string, int, enum и т. Д. Так что это не так. Наверное, я прибегу к решению позади решения. – isakavis

Смежные вопросы