2011-04-30 47 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