CollectionView - создание групп через условные, а не свойства

Возможно, я мог бы выполнить то, что я хочу, менее изящным способом, но чтобы избежать этого, можно ли:

С одним CollectionView, создать группу внутри него на основе некоторого условия (например, одно из его других свойств не является нулевым)? Я мог бы создать свойство в классе, на котором основано представление, но это довольно специфический / незначительный вариант использования, поэтому я бы предпочел этого не делать. Не имеет значения, делаю ли я это в WPF/XAML или в коде.

Затем мне нужно будет отсортировать элементы в представлении по их групповой принадлежности, а также отсортировать элементы внутри групп. Но меня больше всего беспокоит мой первый пункт.

1 ответ

Создайте свой собственный класс, производный от PropertyGroupDescription, и переопределите метод NamesMatch, реализуя собственную логику о том, какие элементы группировать.

В следующем примере я группирую все элементы типа MyClass, чье свойство OtherProperty равно нулю:

.xaml

<CollectionViewSource Source="{Binding MyItems}" x:Key="myKey">
    <CollectionViewSource.GroupDescriptions>
        <local:MyGroupingDescription PropertyName="." />
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

.cs

public class MyGroupingDescription : PropertyGroupDescription
{
    public override bool NamesMatch(object groupName, object itemName)
    {
        if((groupName as MyClass).OtherProperty == null && (itemName as MyClass).OtherProperty==null)
        {
            return true;
        }

        return false;
    }
}
Другие вопросы по тегам