Silverlight рекурсивно связывает Treeview с XDocument - PullRequest
2 голосов
/ 18 апреля 2010

Как я могу рекурсивно связать древовидное представление с XDocument, сопоставляя каждый элемент XML с узлом древовидного представления?

Приведенный ниже код должен работать с моей точки зрения (а также в соответствии с очень немногими сообщениями, которые я нашел относительно прямой привязки), однако это не так:

<sdk:TreeView ItemsSource="{Binding Path=Elements}" DataContext="{Binding Path=Data}">
  <sdk:TreeView.ItemTemplate>
   <data:HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}">
    <StackPanel Orientation="Vertical">
     <TextBlock Text="{Binding Name}"/>
    </StackPanel>
   </data:HierarchicalDataTemplate>
  </sdk:TreeView.ItemTemplate>
</sdk:Treeview>

(Данные - это свойство типа XElement родительского DataContext)

Я где-то допустил ошибку или мне действительно нужно реализовать IValueConverter, чтобы получить дочерние элементы XElement?

1 Ответ

1 голос
/ 18 апреля 2010

Элемент "Элементы" не является свойством, это вызов метода.
Вы не можете привязать к вызовам методов в Silverlight.

Если вы действительно хотите, чтобы этот сценарий работал, у вас есть 2 варианта, которые я вижу:
1. Используйте IValueConverter для извлечения содержимого метода «Элементы».
2. Оберните XDocument в управляемые классы в правильной иерархии.

Лично, хотя вариант № 1 кажется самым быстрым, я считаю, что в долгосрочной перспективе вам потребуется больше времени на обслуживание и поддержку, чем на дополнительные 10 минут на создание подходящей модели домена.

С уважением,
- Джастин Энджел

...