Как добавить ресурс: XML-файл

#c# #wpf #xml #resources

#c# #wpf #xml — файл #Ресурсы #xml

Вопрос:

В настоящее время я использую следующий XAML-код для добавления моего 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 = «», доступного в ресурсах.Добавить метод, следовательно, приложение работает некорректно.

Есть ли способ установить это свойство? Или я делаю это неправильно?

Нет ответа Google на этот вопрос.

Большое вам спасибо.

Ответ №1:

Вы можете использовать этот фрагмент в коде за:

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

Я предлагаю последнее решение.

Комментарии:

1. Спасибо, Маттиас, это работает со вторым решением. Мне просто пришлось изменить: Uri booksfile_path = новый Uri(Environment. GetFolderPath(Среда. Специальная папка. ApplicationData) «\myfile.xml «); метод as .Source принимает не строку, а Uri вместо нее.

2. Одна вещь заключается в том, что теперь, с этой реализацией, загрузка моего XML-содержимого занимает намного больше времени (я отображаю его в виде списка), примерно 5 секунд. Это было примерно за 1 секунду до этого. Я могу что-нибудь сделать, чтобы сократить это?

3. Я не знаю… Тем не менее, я модифицирую свой пост вашим кодом для дальнейших ссылок другими пользователями.