我将 XSD 作为数据保存在 SQL Server XML 或 oracle XMLtype 字段中。我从数据库中检索 XSD 作为 XDocument。我想在 WPF TreeView 中显示这个 XDocument。如果我使用 xmldataprovider 和hierarchicalDataTemplate 将Xdocument 直接绑定(bind)到treeview,这是相对简单的。
但是,我的应用程序使用 mvvm 模式,我想在 ViewModel 层中表示 xdocument,然后 TreeView 以类似于将 WPF TreeView 绑定(bind)到 ViewModels 的 Josh Smith 文章绑定(bind)到该层。
http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx
我的目标是选择 XSD (XDocument) 的 XNode。
关于如何在 ViewModel 中表示 XSD 的 Xdocument 以便我可以选择 XNode 的任何建议?
最佳答案
如果您正在执行只读操作,我建议您保持简单,不要引入没有任何好处的新类。如果您想支持编辑结构,只需留下您应该添加 View 模型的评论。即使您希望能够编辑文档,您仍然可以直接绑定(bind)到文档和节点,具体取决于您的需要。
如果您需要更高级的支持(如 INotifyPropertyChanged
),我建议您创建一个类似于原始 API 的类层次结构,基于 XObject
.我只会添加我计划在 UI 中直接支持的属性。然后我会创建一个单独的模型类,它可以从 XDocumentViewModel
转换。层次结构到真正的XDocument
, 然后回来。
... how [to] represent the Xdocument of an XSD in the ViewModel so that I can select an XNode.
你说的选择是什么意思?
如果您的意思是在 UI 中,那么在 XAML 中已经处理好了。
如果您正在谈论查询 View 模型,那么您可以尝试对底层文档使用现有的 LINQ XML 查询 API。保留一个内部字典,将 XObjects 映射回您的 View 模型对象,当您获得结果时,只需在返回之前在字典中查找每个结果。
关于wpf - 使用 MVVM ViewModel 将 XDocument 显示为 WPF TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676404/