Привязка данных из xml к DataGridComboBoxColumn

WPF
  1. 5 года назад

    Здравствуйте.

    Есть файл xml следующей структуры
    <?xml version="1.0" encoding="utf-8" ?>
    <Options>
    <FilesMask>
    <Mask>1.txt</Mask>
    </FilesMask>
    <DirMask>
    <Mask Value="1" Operation="Равно">2</Mask>
    </DirMask>
    <Operations>
    <Operation>Равно</Operation>
    <Operation>Содержит</Operation>
    </Operations>
    <CopyPath>D:\22</CopyPath>
    </Options>

    xaml разметка
    ....
    <Window.Resources>
    <XmlDataProvider x:Key="Options" Source="Options.xml" XPath="Options"></XmlDataProvider>
    </Window.Resources>
    ....
    <DataGrid Grid.Row="1" Grid.Column="0" MinHeight="100" Margin="5,4,3,2" DataContext="{StaticResource Options}"
    ItemsSource="{Binding XPath=DirMask/Mask}" AutoGenerateColumns="False">
    <DataGrid.Columns>
    <DataGridTextColumn Header="Маска каталога" Binding="{Binding XPath=@Value}" Width="150"></DataGridTextColumn>
    <DataGridComboBoxColumn Header="Сравнение" SelectedItemBinding="{Binding XPath=@Operation}" Width="80">
    </DataGridComboBoxColumn>
    </DataGrid.Columns>
    ....
    Подскажите пожалуиста почему в столбце "Сравнение" данные не отображаются? Что я сделал не так(В столбце "Маска каталога" данные есть)? И как можно привязать значения из секций <Operations> к ItemsSource DataGridComboBoxColumn

  2. Alexandr_Erohin

    Jul 5 Администратор
    Добавлено 5 года назад Alexandr_Erohin
    <DataGridComboBoxColumn Header="Сравнение" Width="80" 
                     ItemsSource="{Binding Source={StaticResource Options}, XPath=Operations}" 
                     DisplayMemberPath="Operation"
                     SelectedItemBinding="{Binding Source={StaticResource Options}, XPath=Operations}" ></DataGridComboBoxColumn>

    Правда привязка может работать некорректно и извлекать не все значения, т.к. XmlDataProvider коряво работает с коллекциями. Я бы рекомендовал использовать в данном случае более прямой подход - вместо использования XmlDataProvider пройти по XML файлу с помощью LINQ to XML и извлечь данные в общедоступные свойства, которые и привязывать в DataGrid'e.

  3. Спасибо за ответ! Насчет XmlDataProvider приму к сведенью! Единственное можно ли как то сделать что бы в DataGridComboBoxColumn
    изначально отображались данные DirMask/Mask/@Operation(секция DirMask,Mask, атрибут Operation), а в выпадающем окне находились данные из секций <Operations>

или зарегистрируйтесь чтобы ответить