C# 使ItemsSource将集合视为单个项,而不是对其进行迭代?
我有一个显示对象属性的C# 使ItemsSource将集合视为单个项,而不是对其进行迭代?,c#,wpf,collections,treeview,itemssource,C#,Wpf,Collections,Treeview,Itemssource,我有一个显示对象属性的TreeView。属性之一是大字节数组 TreeView的ItemsSource显然将其视为子节点的集合,但我实际上想要的是一个子节点,它显示仍然可以展开/折叠的整个阵列 目前 - MyObject Prop1 Prop2 - PropWithBytes 1 2 3 etc 我想要的是: - MyObject Prop1 Prop2 - PropWithBytes 1, 2
TreeView
。属性之一是大字节数组
TreeView的ItemsSource
显然将其视为子节点的集合,但我实际上想要的是一个子节点,它显示仍然可以展开/折叠的整个阵列
目前
- MyObject
Prop1
Prop2
- PropWithBytes
1
2
3
etc
我想要的是:
- MyObject
Prop1
Prop2
- PropWithBytes
1, 2, 3 etc
有没有办法告诉树将集合视为单个节点
如果我不希望实际数据仍然是一个单独的节点,我可以很容易地编写一个
DataTemplate
(与hierarchycaldatatemplate
)来显示它。我还可以使用数据模板
,该模板使用扩展器
来隐藏工作正常但外观难看的数据。如果我正确理解您的问题,请尝试使用ValueConverter,它将检查传递的值是否为字节数组(如果是字节数组,则返回其字符串表示形式)
公共类ByteArrayValueConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
if(value!=null&&value为IEnumerable)
返回string.Join(“,”,(IEnumerable)值);
返回值;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotSupportedException();
}
}
如果不是因为我仍然需要在子模板中以字节[]的形式访问参数(因此如果数据太宽,我可以包装数据),那就太完美了。我想我可以编写另一个转换器来再次将其转换回来,但这感觉很不舒服。我已标记为答案,因为您启发了实际的解决方案-使用转换器将数组包装到另一个包含1项的数组中。很好,谢谢!
public class ByteArrayValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && value is IEnumerable<byte>)
return string.Join(", ", (IEnumerable<byte>)value);
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}