首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在代码中加载XmlDataProvider

在代码中加载XmlDataProvider
EN

Stack Overflow用户
提问于 2012-01-23 21:55:45
回答 1查看 5.5K关注 0票数 0

我迷惑了

我有xml文档

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Reports>
  <Report Id="AAAAA-ABBB">
    <DocId>10110001</DocId>
    <DocName>ESP North Casing</DocName>
    <DocType>2010-01-01</DocType>
    <Status>1</Status>
    <CreatedById>1</CreatedById>
    <SiteId>1</SiteId>
    <Language>1</Language>
    <Updated>2011-01-01</Updated>
    <Published>2011-01-01</Published>
    <FilePath>c:\\reports\20011001.docx</FilePath>
  </Report>
  <Report Id="AAAAA-ABBC">
    <DocId>10110002</DocId>
    <DocName>ESP South Casing</DocName>
    <DocType>2010-01-01</DocType>
    <Status>1</Status>
    <CreatedById>1</CreatedById>
    <SiteId>1</SiteId>
    <Language>1</Language>
    <Updated>2011-01-01</Updated>
    <Published>2011-01-01</Published>
    <FilePath>c:\\reports\20011001.docx</FilePath>
  </Report>
</Reports>

如果我定义一个像这样的静态xmldataprovider

代码语言:javascript
复制
 <UserControl.Resources>

    <XmlDataProvider x:Key="ReportData"
               Source="../DesignData/report.xml"
               XPath="Reports/Report" />

    <DataTemplate x:Key="teamItemTemplate">
        <Label Content="{Binding XPath=DocId}"/>
    </DataTemplate>
</UserControl.Resources>

并在列表框中显示文档

代码语言:javascript
复制
<ListBox x:Name="ReportListBox" Margin="60,12,114,64" DockPanel.Dock="Left"
             ItemsSource="{Binding 
         Source={StaticResource ReportData}}"

             ItemTemplate="{StaticResource teamItemTemplate}"
             IsSynchronizedWithCurrentItem="True"
             Visibility="Visible" SelectionMode="Single">
</ListBox>

我可以看到列表框中的数据

如果我在代码中执行相同的操作并在视图模型中加载xmldataprovider

代码语言:javascript
复制
  private XmlDataProvider GetXMLReports()
        {
              string filePath = Directory.GetCurrentDirectory() + @"\Data\report.xml";
              XmlDataProvider provider = new XmlDataProvider(); 
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
              doc.Load(filePath); 
              provider.Document = doc; 
              provider.XPath = "Reports/Report";
              //Reports = _provider;

              return provider;

        }

        public XmlDataProvider Reports
        {
            get { return _provider; }
            set
            {
                _provider = value;
                this.RaisePropertyChanged(() => this.Reports);
            }
        }

如果我将datacontext设置为viewmodel并绑定到属性报表

代码语言:javascript
复制
<ListBox x:Name="ReportListBox" Margin="60,12,114,64" DockPanel.Dock="Left"
                 ItemsSource="{Binding Path=Reports}"

                 ItemTemplate="{StaticResource teamItemTemplate}"
                 IsSynchronizedWithCurrentItem="True"
                 Visibility="Visible" SelectionMode="Single">
    </ListBox>

没有显示任何内容,没有任何想法。

EN

回答 1

Stack Overflow用户

发布于 2012-01-23 23:06:18

你想要实现的是不可能的afaik。

作为一种解决方法,您可以在ListBox中像这样设置DataContext,它应该可以工作:

代码语言:javascript
复制
     DataContext="{Binding Reports}"    
     ItemsSource="{Binding}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8972743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档