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