чтение файлов xaml с помощью XDocument - PullRequest
1 голос
/ 29 июня 2011

У меня есть следующий xaml-файл данных silverlight, который идеально работает в режиме разработки:

<viewmodel:MapViewModel 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewmodel="clr-namespace:MyApplication.ViewModels">
<viewmodel:MapViewModel.Lines>
    <viewmodel:Line Line="M 100 100 L 280 100 S 302 102 315 115 L 500 300"/>
</viewmodel:MapViewModel.Lines></viewmodel:MapViewModel>

Поскольку эти данные также полезны во время выполнения (может быть, не навсегда), я хочу прочитатьXML в коде позади.Поэтому я использую XDocument, и он работает, значит, я могу читать и анализировать весь документ.Но я не могу понять, как получить доступ к элементам.Как я могу получить доступ к «линии»?

То, что я пробовал, это:

            var lines = doc.Descendants(XName.Get("Line", "viewmodel:")).ToArray();

Это всегда ничего не возвращает.Поскольку я предполагал, что это проблема пространства имен, я попытался

  • "viewmodel"
  • "viewmodel:"
  • "MyApplication.ViewModels"
  • "MyApplication.ViewModels:"
  • "clr-namespace: MyApplication.ViewModels" и
  • "clr-namespace: MyApplication.ViewModels:"

Может кто-нибудь сказать мне, что я делаю неправильно?Является ли отсутствующий xml-заголовок причиной?Я уже прочитал xml-файл с правильным заголовком (но без пространства имен), и это сработало.

1 Ответ

1 голос
/ 29 июня 2011

использовать XNamespace:

var xdoc = XDocument.Parse(xaml);
XNamespace ns = "clr-namespace:MyApplication.ViewModels";
var lines = xdoc.Descendants(ns + "Line").ToArray();

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

var lines = xdoc.Descendants("{clr-namespace:MyApplication.ViewModels}Line").ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...