WPF, читать данные из XmlDataProvider в C # - PullRequest
2 голосов
/ 25 августа 2010

Я хочу TreeView с флажками, и я пытаюсь следовать этому уроку . Однако в нем он создает весь свой контент для TreeView во время выполнения. У меня есть XML-файл, который я могу использовать как XmlDataProvider в своем XAML:

<XmlDataProvider Source="XmlData/Versions.xml" XPath="//*[count(*)=0]"
                 x:Key="versionsXml" />

У меня есть класс модели представления со свойствами IsChecked и Name, и я хочу использовать это для представления узлов в моем XML:

<Versions>
  <Version name="1.0">
    <Version name="1.0.001" />
    <Version name="1.0.002" />
  </Version>
</Versions>

Мой TreeView будет отображать конечные узлы (т. Е. 1.0.001 и 1.0.002) с флажком. Как я могу заполнить свой TreeView не содержимым XmlDataProvider напрямую, а скорее List<MyViewModel>? Я могу создать свойство в своем DataContext, которое возвращает List<MyViewModel>, а затем привязать мой TreeView к этому свойству, но я не знаю, как в получателе свойств C # читать XML-данные из XmlDataProvider. Когда я использую TryFindResource и приводим результат object к XmlDataProvider, свойства Document и Data равны нулю для моего ресурса versionsXml (определенного в <UserControl.Resources>).

1 Ответ

0 голосов
/ 25 августа 2010

Прочитав этой темы , я сделал следующее:

<XmlDataProvider Source="XmlData/Versions.xml" XPath="//*[count(*)=0]"
                 x:Key="versionsXml" IsInitialLoadEnabled="True"
                 IsAsynchronous="False" />

Затем в C # для доступа к данным XmlDataProvider, поскольку свойство Data больше не равно нулю:

var versions = new List<MyViewModel>();
var dataProvider = TryFindResource("versionsXml") as XmlDataProvider;
if (null == dataProvider)
{
    return versions;
}
var nodes = dataProvider.Data as IEnumerable;
if (null == nodes)
{
    return versions;
}
foreach (XmlElement node in nodes)
{
   ...
}
...