Связывание XML-файла WPF XAML Datagrid с XElement, XML-файл, загруженный в отделенном коде

Ну вот, опять дети, еще один турист, потерявшийся в лесу вокруг WPF Databinding. Это был плодотворный день лазания по перевернутой ледяной стене, связывающей данные, но я уже не в своем уме. Никакие примеры, которые я нахожу, или количество SNOOP'инга не помогают мне найти мою проблему. Надеюсь, какая-нибудь рок-звезда, занимающаяся связыванием данных, вы все трое, сможете хоть как-то помочь! :)

XML-файл — лица и имена изменены, чтобы защитить невиновных.

    <?xml version="1.0" encoding="utf-8" ?>
<Mappings>
  <Mapping>
    <Class1>WonderBread</Class1>
    <Class2>Tortilla</Class2>
    <Properties>
      <Property>
        <Jx>name</Jx>
        <Dyn>Name</Dyn>
        <Create>1</Create>
        <Update>0</Update>
      </Property>
      <Property>
        <Jx>Juice</Jx>
        <Dyn>Juice</Dyn>
        <Create>1</Create>
        <Update>0</Update>
      </Property>
      <Property>
        <Jx>Fred</Jx>
        <Dyn>Fred</Dyn>
        <Create>1</Create>
        <Update>0</Update>
      </Property>
      <Property>
        <Jx>Love</Jx>
        <Dyn>Love</Dyn>
        <Create>1</Create>
        <Update>0</Update>
      </Property>
    </Properties>
  </Mapping>
</Mappings>

Как я загружаю этот XML-файл и устанавливаю его в свои DataGrid DataContext. Делается в конструкторе. Это загружается правильно, через SNOOP я вижу файл XML в DataContext.

    // load the ObjectMappingXML file and set as Gridview Context
    XEClassMappings = XElement.Load(ConfigurationManager.AppSettings["ClassMappingXML"]);
    dgMapping.DataContext = XEClassMappings;

Код XAML для отображения содержимого

        <DataGrid x:Name="dgMapping" ItemsSource="{Binding Path=Elements[Property]}" Height="569">
            <DataGrid.Columns >
                <DataGridTextColumn Header="JxAPI Prop" Binding="{Binding Path=Element[Jx].Value}"/>
                <DataGridTextColumn Header="Dyn Prop" Binding="{Binding Path=Element[Dyn].Value}"/>
            </DataGrid.Columns>
        </DataGrid>

Что, во имя всего святого, мне не хватает? 8 часов обнадеживающих F5 поставили меня в тупик...


person John Kocktoasten    schedule 04.09.2013    source источник


Ответы (1)


Вам нужно будет добраться до элемента свойств. Измените привязку ItemsSource на приведенную ниже:

<DataGrid x:Name="dgMapping" ItemsSource="{Binding Path=Element[Mapping].Element[Properties].Elements[Property]}" Height="569">

Это сработает.

Надеюсь, поможет

person Nitin    schedule 04.09.2013