wpf - 如何将 XmlDataProvider.Source 绑定(bind)到 MVVM 属性

标签 wpf xml data-binding binding xmldataprovider

我在 this example 之后有一个绑定(bind)到 XmlDataProvider 的 TreeView .我正在开发的应用遵循 MVVM 模式,Xml 来自用户将打开的文件。

当我尝试像这样绑定(bind) XmlDataProvider 的 Source 属性时

<XmlDataProvider Source="{Binding Path=XmlFilePath}"/>

我收到“绑定(bind)只​​能应用于依赖对象的 DependencyProperty”。或类似的东西。

除了在程序上将绑定(bind)拼凑在一起之外,有没有办法以声明方式绑定(bind) XmlDataProvider Source?如果我尝试放弃数据提供程序并将树直接绑定(bind)到 XmlNode 属性,我会收到有关仅对 Xml 对象使用 XPath 绑定(bind)的错误;这对我来说完全没有意义,但我确信它试图告诉我一些重要的事情。

最佳答案

答案似乎是:你不能。

通过从等式中删除 XmlDataProvider 并将 TreeView 直接绑定(bind)到返回 XmlNode 的 ViewModel 属性,我能够解决我的潜在问题(将 treeview 绑定(bind)到 Xml 文档)。

让我感到困惑的是,我将指向 XmlDataProvider 的绑定(bind)代码指向我的属性,而将 XPath 参数留在原地。

<TreeView ItemsSource="{Binding Path=ProjectDocument XPath=.}">

这会导致运行时错误:System.Windows.Data Error: 44 : BindingExpression with XPath cannot bind to non-XML object.; XPath='.'

这不是最有帮助的。它真正想说的是,您不能绑定(bind)到 XmlNode 属性并在绑定(bind)中提供 XPath 参数(因为 XmlDataProvider 知道该做什么那个??)。

<TreeView ItemsSource="{Binding Path=ProjectDocument}">

关于wpf - 如何将 XmlDataProvider.Source 绑定(bind)到 MVVM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866942/

相关文章:

wpf - 按钮可见性绑定(bind)不更新

c# - Listview滚动触发Combobox SelectedValue并抛出异常

.net - 如何每秒更新一次 WPF 绑定(bind)?

c# - 如何在 Wpf-app 中使用 9-patch 图像

javascript - IE9 未获取 XML 节点的 'children'

xml - 使用 T-SQL 更新多个 XML 节点

未找到 AndroidHttpClient(运行 Robolectric 时)

java - 使用 JAXB 为 XMLRootElement 或 XMLElement 注释动态添加值

javascript - AngularJS : ng-bind-html depending on variable

c# - 字段更改时,MVVM 对象触发属性更改事件