C# 在CollectionViewSource中添加第二组级别->;异常:无法将MS.Internal.Data.CollectionViewGroupInternal类型的对象强制转换为类型

C# 在CollectionViewSource中添加第二组级别->;异常:无法将MS.Internal.Data.CollectionViewGroupInternal类型的对象强制转换为类型,c#,wpf,C#,Wpf,尝试在WPF CollectionViewSource中添加第二个分组级别时,出现错误,无法将类型为“MS.Internal.Data.CollectionViewGroupInternal”的对象强制转换为类型为“MyApp.ContractEx” <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="ThisNewGroupCausesException"

尝试在WPF CollectionViewSource中添加第二个分组级别时,出现错误,无法将类型为“MS.Internal.Data.CollectionViewGroupInternal”的对象强制转换为类型为“MyApp.ContractEx”

<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是可访问的