使用MVVM ViewModel将XDocument显示为WPF树视图

使用MVVM ViewModel将XDocument显示为WPF树视图,wpf,mvvm,treeview,viewmodel,linq-to-xml,Wpf,Mvvm,Treeview,Viewmodel,Linq To Xml,我将XSD作为数据保存在SQL Server XML或oracle XMLtype字段中。我从数据库中检索XSD作为XDocument。我想在WPF树视图中显示此XDocument。如果我使用xmldataprovider和HierarchycalDataTemplate将Xdocument直接绑定到treeview,这是相对简单的 但是,我的应用程序使用的是mvvm模式,我希望在ViewModel层中表示xdocument,treeview然后以类似于Josh Smith关于将WPF tree

我将XSD作为数据保存在SQL Server XML或oracle XMLtype字段中。我从数据库中检索XSD作为XDocument。我想在WPF树视图中显示此XDocument。如果我使用xmldataprovider和HierarchycalDataTemplate将Xdocument直接绑定到treeview,这是相对简单的

但是,我的应用程序使用的是mvvm模式,我希望在ViewModel层中表示xdocument,treeview然后以类似于Josh Smith关于将WPF treeview绑定到ViewModels的文章的方式绑定到该层。

我的目标是选择XSD(XDocument)的一个XNode


关于如何在ViewModel中表示XSD的Xdocument以便选择XNode,有什么建议吗?

如果您正在执行只读操作,我建议您保持简单,不要引入没有任何好处的新类。只需留下一条注释,说明如果希望支持编辑结构,则应添加视图模型。即使您希望能够编辑文档,也可以根据需要直接绑定到文档和节点

如果您需要更高级的支持(如
INotifyPropertyChanged
),我建议您基于
XObject
创建一个类层次结构,如原始API。我只会在UI中添加我计划直接支持的属性。然后,我将创建一个单独的模型类,它可以从
XDocumentViewModel
层次结构转换为真正的
XDocument
,然后再转换回来

。。。如何在ViewModel中表示XSD的Xdocument,以便选择XNode

你所说的选择是什么意思

如果您的意思是在UI中,那么这在XAML中得到了处理

如果您正在谈论查询视图模型,那么您可以尝试对底层文档使用现有的LINQXML查询API。保留一个内部字典,将XObject映射回视图模型对象,当您得到结果时,只需在返回结果之前在字典中查找每个结果