You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现CompositeCollectionConverter后无法访问调试Raw View属性问题

解决CompositeCollectionConverter中无法访问Raw View属性的问题

你遇到的情况是:调试时能在Raw View看到对象的属性,但强转成已知类型后无法访问。这是因为values数组中的对象通常是动态代理、封装类(比如WPF的CollectionView)或匿名类型,这些类型的属性无法通过常规强转直接访问,可通过以下方法处理:

方法1:使用反射获取属性值

反射可以无视编译时类型限制,直接读取对象的属性:

foreach (var item in values)
{
    if (item is IEnumerable enumerableItem && item != null)
    {
        // 替换为你需要获取的属性名称
        var propertyInfo = item.GetType().GetProperty("TargetPropertyName");
        if (propertyInfo != null)
        {
            var propertyValue = propertyInfo.GetValue(item);
            // 此处可对属性值进行业务处理
        }

        res.Add(new CollectionContainer()
        {
            Collection = enumerableItem
        });
    }
}

方法2:使用dynamic类型(.NET 4.0+)

如果明确知晓属性名称和存在性,可通过dynamic绕过编译时类型检查:

foreach (var item in values)
{
    if (item is IEnumerable enumerableItem && item != null)
    {
        dynamic dynamicItem = item;
        // 直接访问属性,注意属性名称拼写错误会触发运行时异常
        var propertyValue = dynamicItem.TargetPropertyName;

        res.Add(new CollectionContainer()
        {
            Collection = enumerableItem
        });
    }
}

方法3:针对WPF绑定包装对象的特殊处理

如果values中的对象是WPF的ICollectionView(如ListCollectionView),它的原始集合和视图属性需通过特定成员访问:

foreach (var item in values)
{
    if (item is System.Windows.Data.ICollectionView collectionView)
    {
        // 获取视图包装的原始集合
        var originalCollection = collectionView.SourceCollection;
        // 获取视图当前选中项
        var currentItem = collectionView.CurrentItem;
        // 处理需要的属性
        
        res.Add(new CollectionContainer()
        {
            Collection = originalCollection
        });
    }
    else if (item is IEnumerable enumerableItem && item != null)
    {
        res.Add(new CollectionContainer()
        {
            Collection = enumerableItem
        });
    }
}

注意事项

  • 使用反射时要处理属性不存在的场景,避免空引用异常;
  • 使用dynamic时需确保属性真实存在,否则会抛出运行时错误;
  • 若对象是第三方框架生成的动态代理,需参考框架文档确认属性访问方式。

内容的提问来源于stack exchange,提问作者Mihir Choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:41:12