代码之家  ›  专栏  ›  技术社区  ›  dkackman Srinivas Kokkula

如何将XmlDataProvider.Source绑定到MVVM属性

  •  1
  • dkackman Srinivas Kokkula  · 技术社区  · 16 年前

    XmlDataProvider 下列的 this example

    当我尝试绑定 XmlDataProvider

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

    我得到一个“绑定只能应用于依赖对象的DependencyProperty”之类的东西。

    除了按程序将绑定拼凑在一起,还有没有一种方法可以声明性地绑定 XmlDataProvider Source XmlNode 属性我得到一个关于仅对Xml对象使用XPath绑定的错误;这对我来说毫无意义,但我确信这是想告诉我一些重要的事情。

    3 回复  |  直到 9 年前
        1
  •  4
  •   dkackman Srinivas Kokkula    16 年前

    答案似乎是:你不能。

    XmlDataProvider 将树视图直接绑定到返回XmlNode的ViewModel属性。

    让我绊倒的是,我使用了指向 XmlDataProvider 并将其指向我的属性,保留XPath参数。

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

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

    这不是最有用的。它真正想说的是,你不能绑定到 XmlNode 属性并提供 XPath

    <TreeView ItemsSource="{Binding Path=ProjectDocument}">
    
        2
  •  2
  •   George    13 年前

    将源作为资源添加到项目中

    我找到的解决方案是将临时文件(标记是通过XAML创建的,请参见下文)添加到项目中,并将构建操作设置为 Content 因此,应用 重装 InitializeComponent() 关于包含 XmlDataProvider

        <XmlDataProvider x:Key="dshPreview" 
                         Source="~tmpConstruct.xml" 
                         XmlNamespaceManager="{StaticResource argNms}"   
                         IsAsynchronous="true"/>
    

    TreeView是这样绑定的:

      <TreeView  x:Name="PreviewTree" 
                 ItemsSource="{Binding Source={StaticResource dshPreview},
                 XPath=/mns:engine/mns:ws}"
                  />         
    

        3
  •  1
  •   Pamplemousse    13 年前

    我没有找到如何直接绑定源代码,但您可以在代码中更改XmlDataProvider源代码,如下所示:

    var xdp = (XmlDataProvider)this.Resources["key-of-your-XmlDataProvider-in-resources"];
    xdp.Source = new Uri("http://url-of-your-xml");
    

    推荐文章