#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. Я не знаю… Тем не менее, я модифицирую свой пост вашим кодом для дальнейших ссылок другими пользователями.