2012-02-02 56 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

相關問題