Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将WPF CollectionViewGroup类型更改为自定义类型并在ListCollectionView中使用它_C#_Wpf_Collectionviewsource - Fatal编程技术网

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

C# 如何将WPF CollectionViewGroup类型更改为自定义类型并在ListCollectionView中使用它,c#,wpf,collectionviewsource,C#,Wpf,Collectionviewsource,如何将视图属性的类型重写为自定义类型。 My CustomGroupListCollectionView类型向Groups属性添加额外属性。 在运行时,当我观察到视图属性的类型为ListCollectionView时,我想将其更改为CustomGroupListCollectionView public class CollectionViewSourceCustom : CollectionViewSource { public new CustomGroupListCollecti

如何将视图属性的类型重写为自定义类型。 My CustomGroupListCollectionView类型向Groups属性添加额外属性。 在运行时,当我观察到视图属性的类型为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; }
    }
} 
公共类CollectionViewSourceCustom:CollectionViewSource
{
公共新CustomGroupListCollectionView视图{get;set;}
}
公共类CustomGroupListCollectionView:ListCollectionView
{
私有只读自定义组_allGroup;
公共CustomGroupListCollectionView(IList列表)
:基本(列表)
{
_allGroup=新客户组(“全部”);
foreach(列表中的变量项)
{
_所有组。附加项(项目);
}
}
公共重写ReadOnlyObservableCollection组
{
得到
{
var group=新的ObservableCollection(base.Groups.ToList());
组。添加(_allGroup);
返回新的ReadOnlyObservableCollection(组);
}
}
}
公共类CustomGroup:CollectionViewGroup
{
公共自定义组(对象名称)
:base(名称)
{
}
公共无效附加项(对象项)
{
ProtectedItems.Add(项目);
}
公共覆盖bool IsBottomLevel
{
获取{return true;}
}
布尔被检查;
公共场所被检查
{
获取{return\u已检查;}
设置{u IsChecked=value;}
}
能见度_CheckBoxVisibility;
公众能见度复选框能见度
{
获取{return\u CheckBoxVisibility;}
设置{u CheckBoxVisibility=value;}
}
布尔(u)被扩张;;
公共图书馆被扩展了
{
获取{return\u IsExpanded;}
设置{u IsExpanded=value;}
}
可视性、可扩展性;
公共可见性可扩展性
{
获取{return\u可扩展性;}
设置{u可扩展性=值;}
}
可见性_ImageVisibility=可见性。已折叠;
公众能见度
{
获取{return\u ImageVisibility;}
设置{u ImageVisibility=value;}
}
} 

CollectionViewSource有一个CollectionViewType属性,可用于确定CollectionViewSource返回的CollectionView类型,如

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


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

如果您仍然坚持使用自己的方式,我建议您使用以下代码:

public class CollectionViewSourceCustom : CollectionViewSource
{
    public CollectionViewSourceCustom()
        : base()
    {
        ((ISupportInitialize)this).BeginInit();

        this.CollectionViewType = typeof(CustomGroupListCollectionView);

        ((ISupportInitialize)this).EndInit();
    }
}

希望有帮助。

在运行时给我分配新类型this.GroupByView.CollectionViewType=typeof(CustomGroupListCollectionView)时出现此错误“CollectionViewType属性只能在初始化期间设置”;此消息意味着您只能在XAML中或在初始化事件激发之前设置CollectionViewType属性;这将在调用initializecomponent之前在构造函数中。