Вот что я сделал до сих пор:
В моем классе App
я объявляю новый XmlDataProvider
и устанавливаю в качестве источника допустимый XML-файл (для которого для параметра «Действие построения» установлено значение «Содержимое / Всегда копировать»).
public partial class App : Application
{
public App()
{
InitializeComponent();
var services = new XmlDataProvider();
services.Source = new Uri("pack://siteoforigin:,,,/Data/Services.xml"); // also tried an absolute path, but that made no difference
var mainWindow = new MainWindow();
mainWindow.DataContext = new MainViewModel(services);
mainWindow.Show();
}
}
XmlDataProvider
передается в ViewModel и присваивается свойству Services
.
Я привязываюсь к таким данным:
<mwc:DataGrid
ItemsSource="{Binding Services, XPath=//Services/*}">
<mwc:DataGrid.Columns>
<mwc:DataGridTextColumn
Binding="{Binding XPath=@name}"
Header="Name" />
<mwc:DataGridTextColumn ... />
...
</mwc:DataGrid.Columns>
</mwc:DataGrid>
Результат:
Заголовки столбцов моего DataGrid
отображаются, но нет строк данных. Он компилируется и запускается без каких-либо ошибок, но если я проверяю свое окно вывода, я вижу это:
BindingExpression with XPath cannot bind to non-XML object.;
XPath='//Services/*'
BindingExpression:Path=Services;
Может ли XmlDataProvider использоваться только декларативно?
Если я попытаюсь декларативно создать XmlDataProvider
в ResourceDictionary
, как это ...
<XmlDataProvider
x:Key="Main_Services">
<x:XData>
<Services
xmlns="">
<Service
name="Test"
... />
<Service ... />
...
</Services>
</x:XData>
</XmlDataProvider>
... все работает нормально (я получаю ожидаемые строки в моем DataGrid
). (Обратите внимание, что я просто вставил содержимое файла XML между тегами <x:XData>
.)
Если я попытаюсь установить Source
через C #, в XmlDataProvider
, похоже, не будет никаких данных (буквально, свойство Data
равно нулю).
Похоже, не имеет значения, использую ли я "pack URI" или абсолютный путь, когда присваиваю Source
. Я не получаю строк в любом случае. Я также попытался вызвать метод InitialLoad()
после установки источника, но это тоже не имело значения.
Вопросы:
- XmlDataProvider - не тот инструмент, который подходит для работы, или я что-то не так делаю?
- Может ли XmlDataProvider использоваться только декларативно?
- Я знаю, что есть
XDocument
и XmlDocument
... я должен использовать один из них?