2012-02-02 28 views
1

我有一个TreeView显示一个对象的属性。其中一个属性是一个大字节数组。使ItemsSource将一个集合视为单个项目,而不是迭代它?

TreeView的ItemsSource显然将其视为一个子节点的集合,但我真正想要的是一个子节点显示整个数组仍然可以展开/折叠。

如目前

- MyObject 
    Prop1 
    Prop2 
    - PropWithBytes 
     1 
     2 
     3 
     etc 

我想要什么:

- MyObject 
    Prop1 
    Prop2 
    - PropWithBytes 
     1, 2, 3 etc 

有没有办法告诉树将集合作为一个单一的节点?

如果我不希望实际的数据仍然是一个单独的节点,我可以很容易地编写一个DataTemplate(而不是HierarchicalDataTemplate)来显示它。我也可以使用DataTemplate,它使用Expander来代替隐藏可以正常工作但看起来很丑的数据。

回答

2

如果我正确理解你的问题 - 尝试使用ValueConverter,它将检查传递值是否是字节数组(如果是字节数组,则返回它的字符串表示形式)。

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(); 
    } 
} 
+0

这将是完美的如果不是事实,我仍需要访问帕拉姆为子模板中的一个byte [](这样我就可以换行的数据,如果它太宽)。我想我可以写另一个转换器将其重新转换回来,但感觉很漂亮。 – GazTheDestroyer 2012-02-02 13:37:11

+0

已经标记为答案,因为您启发了实际解决方案 - 使用转换器将数组包装到另一个1项目的数组中。非常好,谢谢! – GazTheDestroyer 2012-02-03 13:14:55

相关问题