以下是我迄今为止所做的工作:
-
在我的
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();
}
}
-
这个
XML数据提供程序
传递到ViewModel并分配给
Services
财产。
-
我绑定到这样的数据:
<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
…我应该使用其中一个吗?