Заставить ItemsSource рассматривать коллекцию как один элемент, а не повторять ее? - PullRequest
1 голос
/ 02 февраля 2012

У меня есть TreeView, показывающий свойства объекта. Одним из свойств является большой байтовый массив.

TreeView ItemsSource, очевидно, рассматривает это как коллекцию дочерних узлов, но на самом деле мне нужен ОДИН дочерний узел, показывающий весь массив, который все еще можно развернуть / свернуть.

например, в настоящее время

- MyObject
    Prop1
    Prop2
  - PropWithBytes
      1
      2
      3
      etc

Что я хочу:

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

Есть ли какой-нибудь способ указать дереву обрабатывать коллекцию как один узел?

Если бы я не хотел, чтобы фактические данные оставались отдельным узлом, я мог бы легко написать DataTemplate (в отличие от HierarchicalDataTemplate), чтобы отобразить их на месте. Я также могу использовать DataTemplate, который вместо этого использует Expander, чтобы скрыть данные, которые работают нормально, но выглядят ужасно.

1 Ответ

2 голосов
/ 02 февраля 2012

Если я правильно понимаю ваш вопрос - попробуйте использовать 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();
    }
}
...