代码之家  ›  专栏  ›  技术社区  ›  devuxer

需要帮助将XML文件连接到WPF数据报

  •  0
  • devuxer  · 技术社区  · 16 年前

    以下是我迄今为止所做的工作:

    1. 在我的 App 类,我声明一个新的 XmlDataProvider 并将源文件设置为有效的XML文件(其生成操作始终设置为内容/复制)。

      public partial class App : Application
      {
          public App()
          {
              InitializeComponent();
              var services = new XmlDataProvider();
              services.Source = new Uri("pack://siteoforigin:,,,/Data/Services.xml"); // also tried an absolute path, but that made no difference
              var mainWindow = new MainWindow();
              mainWindow.DataContext = new MainViewModel(services);
              mainWindow.Show();
          }
      }
      
    2. 这个 XML数据提供程序 传递到ViewModel并分配给 Services 财产。

    3. 我绑定到这样的数据:

      <mwc:DataGrid
          ItemsSource="{Binding Services, XPath=//Services/*}">
          <mwc:DataGrid.Columns>
              <mwc:DataGridTextColumn
                  Binding="{Binding XPath=@name}"
                  Header="Name" />
              <mwc:DataGridTextColumn ... />
              ...
          </mwc:DataGrid.Columns>
      </mwc:DataGrid>
      

    结果:

    我的列标题 DataGrid 显示,但没有数据行。它编译和运行时没有任何错误,但是如果我检查输出窗口,我会看到:

    BindingExpression with XPath cannot bind to non-XML object.;
    XPath='//Services/*'
    BindingExpression:Path=Services;
    

    xmldataProvider只能声明性使用吗?

    如果我试图创建 XMLDATA提供程序 在a中声明 ResourceDictionary 这样地。。。

    <XmlDataProvider
        x:Key="Main_Services">
        <x:XData>
            <Services
                xmlns="">
                <Service
                    name="Test"
                    ... />
                <Service ... />
                ...
            </Services>
        </x:XData>
    </XmlDataProvider>
    

    …一切正常(我的 数据网格 )(注意,我只是将XML文件的内容粘贴到 <x:XData> 标签)

    如果我试图设置 Source 然而,通过C,似乎没有任何数据在 XML数据提供程序 (字面上, Data 属性为空)。

    当我分配 来源 . 我也没有争吵。我也试着打电话给 InitialLoad() 方法设置了源,但也没有区别。

    问题:

    • xmldataprovider是该作业的错误工具还是我做错了什么?
    • xmldataProvider只能声明性使用吗?
    • 我知道有 XDocument XmlDocument …我应该使用其中一个吗?
    1 回复  |  直到 16 年前
        1
  •  1
  •   devuxer    16 年前

    陈述式似乎是一种方式。此代码有效:

    <XmlDataProvider
        x:Key="Main_Services"
        Source="pack://siteoforigin:,,,/Data/Services.xml">
    </XmlDataProvider>
    

    我不知道为什么在C中做同样的事情失败了,但是我可以接受这个解决方案。