Silverlight递归地将Treeview绑定到XDocument

Silverlight递归地将Treeview绑定到XDocument,silverlight,data-binding,treeview,linq-to-xml,xelement,Silverlight,Data Binding,Treeview,Linq To Xml,Xelement,如何递归地将树视图绑定到XDocument,将每个XML元素映射到树视图中的节点 从我的角度来看,下面的代码应该是可行的(并且根据我发现的关于直接绑定的极少数帖子),但是它不是: <sdk:TreeView ItemsSource="{Binding Path=Elements}" DataContext="{Binding Path=Data}"> <sdk:TreeView.ItemTemplate> <data:HierarchicalDataTem

如何递归地将树视图绑定到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>

(数据是父对象的DataContext上的XElement类型的属性)

我是否在某个地方犯了错误,或者我真的需要实现一个IValueConverter来获取XElement的子元素吗?

元素成员不是属性,而是方法调用。
无法绑定到Silverlight中的方法调用

如果你真的想让这个场景生效,那么我可以看到两个选项:
1.使用IValueConverter提取“元素”方法的内容。
2.将XDocument封装在适当层次结构中的托管类中

就个人而言,虽然选项1似乎最快,但我相信从长远来看,它将花费您更多的时间来维护和支持,然后再花10分钟构建一个合适的域模型

真诚地,

--贾斯汀·安吉尔

贾斯汀,谢谢你的见解。我正在为各种输入模式创建一个简单的XML编辑器,因此XDocument是我的域模型——我看不出创建/生成每个XML模式的代码副本与“让编辑器不知道”相比有什么好处。虽然我可以试试Linq2Xsd…Michael,你不需要任何花哨的工具。只需围绕具有名称、值和子级的LinqToXml类构建一个简单的3属性包装器。这大约是10行代码,然后数据绑定到它。如果您在实现该方法时遇到问题,请告诉我。虽然有点晚,但为了完整性:我最终确实做到了这一点,为自己编写了一个(不太薄)包装器,并加入了一些方便的方法和属性。谢谢有点晚了,但我能问一下您的XAML是如何改变的以反映您的解决方案吗?Jamie,我并没有真正改变XAML,我只是创建了一个XElementViewModels树,它包装了原始XElements,然后它们公开了一个
元素
IList类型的
属性(属于XElementViewModel)
和一些其他属性,如
Name
。让我知道如果你需要一个完整的例子。。。