如何添加资源:XML文件

3

我目前使用以下XAML代码将我的XML文件添加为资源:

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

现在我想使用位于%appdata%文件夹中的myfile.xml来实现更好的可移植性。显然,使用Source="%appdata%\myfile.xml"是不起作用的,因为似乎XAML不接受“%”字符。
因此,我想在我的主窗口代码中通过编程方式添加此资源。我尝试了:
public MainWindow()
{
    this.Resources.Add("MyData", "D:\\myfile.xml");
    InitializeComponent();
}

但是在Resources.Add方法中,我没有可用的XPath = ""属性,因此应用程序无法正确工作。

有办法设置此属性吗?还是我的做法有误?

谷歌上没有答案。

非常感谢。

1个回答

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");

将一个键为"MyData",值为"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";

我建议选择最后一个解决方案。


谢谢Mattias,第二种解决方案可行。我只需要更改:Uri booksfile_path = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\myfile.xml"); 因为.Source方法不接受字符串,而是需要一个Uri。 - ack__
现在有一个问题是,使用这个实现方式,加载我的 XML 内容(我在列表框中显示它)需要更长的时间,几乎需要 5 秒钟,而之前只需要 1 秒钟。有什么方法可以缩短加载时间吗? - ack__
我不知道... 但是,我会使用你的代码修改我的帖子,以供其他用户参考。 - Mattias Cibien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接