wpf - 使用 MVVM ViewModel 将 XDocument 显示为 WPF TreeView

标签 wpf mvvm treeview viewmodel linq-to-xml

我将 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/

相关文章:

c# - 每个列的 WPF DataGrid CustomSort

c# - 如何在 C# 中将来自网络摄像头的视频编码为 H.264?

wpf - Entity Framework - 将导航属性绑定(bind)到 ListBox

JavaFx CheckTreeView如何检查哪个项目未被选中?

带有格式化文本的 c# Treeview 节点,例如制表符和新行

c# - 如何打破每个项目,但不是完整的根?

wpf - 在 WPF 中本地化

wpf - 将 wpf 用户控件绑定(bind)到父属性

mvvm - 如何在模块化应用程序中连接数据上下文?

c# - 多少层太多了?