如何将WPF CollectionViewGroup类型更改为自定义类型并在ListCollectionView中使用它

Ale*_*vid 3 c# wpf collectionviewsource

如何将View属性的类型重写为我的自定义类型。我的CustomGroupListCollectionView类型为Groups属性添加了额外的属性。在运行时,当我观察到View属性的类型为ListCollectionView时,我想将其更改为CustomGroupListCollectionView。

public class CollectionViewSourceCustom : CollectionViewSource
{
    public new  CustomGroupListCollectionView View { get; set; }
}

public class CustomGroupListCollectionView : ListCollectionView
{
    private readonly CustomGroup _allGroup;

    public CustomGroupListCollectionView(IList list)
        : base(list)
    {
        _allGroup = new CustomGroup("All");
        foreach (var item in list)
        {
            _allGroup.AddItem(item);
        }
    }

    public override ReadOnlyObservableCollection<object> Groups
    {
        get
        {
            var group = new ObservableCollection<object>(base.Groups.ToList());
            group.Add(_allGroup);
            return new ReadOnlyObservableCollection<object>(group);
        }
    }
}

public class CustomGroup : CollectionViewGroup
{
    public CustomGroup(object name)
        : base(name)
    {
    }

    public void AddItem(object item)
    {
        ProtectedItems.Add(item);
    }

    public override bool IsBottomLevel
    {
        get { return true; }
    }

    bool _IsChecked;
    public bool IsChecked
    {
        get { return _IsChecked; }
        set { _IsChecked = value; }
    }
    Visibility _CheckBoxVisibility;
    public Visibility CheckBoxVisibility
    {
        get { return _CheckBoxVisibility; }
        set { _CheckBoxVisibility = value; }
    }

    bool _IsExpanded;
    public bool IsExpanded
    {
        get { return _IsExpanded; }
        set { _IsExpanded = value; }
    }
    Visibility _ExpanderVisibility;
    public Visibility ExpanderVisibility
    {
        get { return _ExpanderVisibility; }
        set { _ExpanderVisibility = value; }
    }

    Visibility _ImageVisibility = Visibility.Collapsed;
    public Visibility ImageVisibility
    {
        get { return _ImageVisibility; }
        set { _ImageVisibility = value; }
    }
} 
Run Code Online (Sandbox Code Playgroud)

hba*_*rck 5

CollectionViewSource具有CollectionViewType属性,您可以使用该属性来确定CollectionViewSource返回的CollectionView的类型,例如

<CollectionViewSource x:Key="source" CollectionViewType="{x:Type my:CustomGroupListCollectionView}" Source="{Binding MyData}"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,您甚至不必创建新的CollectionViewSource类。