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