2011-04-30 397 views
3

我目前使用下面的XAML代码添加到我的XML文件作为一种资源:如何添加资源:XML文件

<XmlDataProvider x:Key="MyData" Source="D:\myfile.xml" XPath="Books/Book" /> 

现在我想用这将myfile.xml从%APPDATA %文件夹,以获得更多的便携性。很明显,使用Source =“%appdata%\ myfile.xml”不起作用,因为它似乎在XAML中不接受“%”字符。

因此,我想以编程方式在我的主窗口代码中添加此资源。我已经试过:

public MainWindow() 
{ 
    this.Resources.Add("MyData", "D:\\myfile.xml"); 
    InitializeComponent(); 
} 

但是当时我没有的XPath =“”可供Resources.Add方法属性,因此,应用程序无法正常工作。

有没有办法设置这个属性?还是我做错了?

没有谷歌回答这个。

非常感谢。

回答

0

您可以在代码隐藏使用此代码片段:

public MainWindow() 
{ 
    XmlDataProvider provider = new XmlDataProvider() 
    provider.Source = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml"); 
    provider.XPath = "Books/Book"; 
    this.Resources.Add("MyData", provider); 
} 

这是正确的代码添加资源,因为

this.Resources.Add("MyData", "D:\\myfile.xml"); 

将增加的recources与关键“迈德特”的字符串和值“ D:\ myfile.xml“

或者您仍然可以使用XAML声明,然后在构造函数中添加:

(this.Resources["MyData"] as XmlDataProvider).Source = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml"; 
(this.Resources["MyData"] as XmlDataProvider).XPath = "Books/Book"; 

我建议最后的解决方案。

+0

谢谢你Mattias,它与第二个解决方案一起工作。我只需要改变:Uri booksfile_path = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+“\\ myfile.xml”);因为.Source方法不接受字符串,而是接受Uri。 – 2011-04-30 13:29:43

+0

现在有一件事,就是这个实现,它花费了更多的时间来加载我的xml内容(我将它显示在一个列表框中),就像差不多5秒钟一样。这就像1秒之前。我能做些什么来缩短这个? – 2011-04-30 13:32:05

+0

我不kkow ...但是,我用您的代码修改我的帖子,以供其他用户进一步参考。 – 2011-04-30 14:44:18