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

标签 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; }
    }
} 

最佳答案

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

<CollectionViewSource x:Key="source" CollectionViewType="{x:Type my:CustomGroupListCollectionView}" Source="{Binding MyData}"/>

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

关于c# - 如何将 WPF CollectionViewGroup 类型更改为自定义类型并在 ListCollectionView 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341977/

相关文章:

c# - 如何更改 3D 对象的不透明度值

c# - 与 CollectionViewSource 绑定(bind)

wpf - 如何使用 CollectionView 功能处理 CompositeCollection?

c# - 从应用程序服务层调用 SignalR Hub 是 ASP.Net 样板中的不良做法吗?

c# - 先按null排序再降序

c# - 查找 HRESULT '-2146697191' 错误消息 - clickonce 设置错误

c# - ViewModel 中的 WPF C# 文本框文本更改更新

wpf - 绑定(bind)到 DataContext 中的项目数

c# - 有界数据更改后重新排序 WPF DataGrid

c# - 使UserControl全屏显示