C# 在CollectionViewSource中添加第二组级别->;异常:无法将MS.Internal.Data.CollectionViewGroupInternal类型的对象强制转换为类型
尝试在WPF CollectionViewSource中添加第二个分组级别时,出现错误,无法将类型为“MS.Internal.Data.CollectionViewGroupInternal”的对象强制转换为类型为“MyApp.ContractEx”C# 在CollectionViewSource中添加第二组级别->;异常:无法将MS.Internal.Data.CollectionViewGroupInternal类型的对象强制转换为类型,c#,wpf,C#,Wpf,尝试在WPF CollectionViewSource中添加第二个分组级别时,出现错误,无法将类型为“MS.Internal.Data.CollectionViewGroupInternal”的对象强制转换为类型为“MyApp.ContractEx” <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="ThisNewGroupCausesException"
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="ThisNewGroupCausesException"/>
<PropertyGroupDescription PropertyName="Month"/>
</CollectionViewSource.GroupDescriptions>
没有其他调试信息,因为调试器不会在导致中断的行上停止
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var list = value as IEnumerable<object>;
if (list == null)
return "0";// "$0.00";
int sumX =0, sumY=0;
foreach (var Cn in list) if (Cn != null)
{
ContractEx C = (ContractEx)Cn; //casting so we can access the properties in the code below.
sumX += C.Ammount;
sumY += C.Height;
}
return sumX + " / " + sumY;
}
//...
}
公共类MyConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
变量列表=作为IEnumerable的值;
if(list==null)
返回“0”;/“$0.00”;
int-sumX=0,sumY=0;
foreach(列表中的变量Cn)如果(Cn!=null)
{
ContractEx C=(ContractEx)Cn;//因此我们可以访问下面代码中的属性。
sumX+=C.氨量;
sumY+=C.高度;
}
返回sumX+“/”+sumY;
}
//...
}
经过一些研究后,我将注意力集中在转换器上作为故障点。
异常发生在IValueConverter
下面的强制转换(来自上面的转换器)假设列表包含ContractEx类型的对象,在添加新的组级别之前就是这种情况
foreach (var Cn in list) if (Cn != null)
{
ContractEx C = (ContractEx)Cn;
添加第二个组级别后,提供给转换器的列表不再是ContractEx的列表。相反,它是一个CollectionViewGroupInternal类型的列表,其每个实例都包含一个名为items的ContractEx列表。此附加嵌套级别是附加组级别的直接结果。
更新代码以说明此嵌套(如下所示)解决了问题:
foreach (CollectionViewGroup cvg in list)
foreach (var Cn in cvg.Items) if (Cn != null)
请注意,异常中提到的CollectionViewGroupInternal是不可访问的,但CollectionViewGroup是可访问的