WPF привязывает сетку данных к значению атрибута XElement

#xml #wpf #xelement

#xml #wpf #xelement

Вопрос:

Я пытаюсь привязать некоторые XML-данные к DataGrid, код работает нормально, но я не могу привязаться к значениям атрибутов.

 <DataGrid Name="productGrid"  HorizontalAlignment="Left" Margin="10,66,0,0" VerticalAlignment="Top" Height="459" Width="748" AutoGenerateColumns="false">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding Path=Element[product].Attribute[id].Value}" />
            <DataGridTextColumn Header="Kategori" Binding="{Binding Path=Element[category].Value}" />
            <DataGridTextColumn Header="Title" Binding="{Binding Path=Element[title].Value}" />
            <DataGridTextColumn Header="Beskrivelse" Binding="{Binding Path=Element[description].Value}" />
            <DataGridTextColumn Header="Pris" Binding="{Binding Path=Element[price].Value}" />
        </DataGrid.Columns>
    </DataGrid>
  

Код, лежащий в основе:

         public Page1()
    {
        InitializeComponent();

        var xElem = XElement.Load(AppDomain.CurrentDomain.BaseDirectory   @"\Data\Products.xml");

        this.defaultView = CollectionViewSource.GetDefaultView(xElem.Elements("product"));
        this.defaultView.Filter = w => ((XElement)w).ToString().Contains(freeText.Text);

        productGrid.ItemsSource = this.defaultView;

    }

    private void SearchProducts(object sender, RoutedEventArgs e)
    {
        // Filter GridView
        this.defaultView.Refresh();
    }
  

Возможно ли привязать столбец к значению атрибута? если да, то как?

И есть ли более элегантный способ привязки столбцов, возможно, из кода?

Комментарии:

1. Покажите свою структуру XML .. и поверьте мне, привязка из кода не будет красивее

Ответ №1:

Вы можете удалить некоторые дополнительные элементы из привязки, т.Е. Element[product] В этом случае они не требуются, поскольку связанным элементом является сам продукт

например

 <DataGrid Name="productGrid"  HorizontalAlignment="Left" Margin="10,66,0,0" VerticalAlignment="Top" Height="459" Width="748" AutoGenerateColumns="false">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Path=Attribute[id].Value}" />
        <DataGridTextColumn Header="Kategori" Binding="{Binding Path=Element[category].Value}" />
        <DataGridTextColumn Header="Title" Binding="{Binding Path=Element[title].Value}" />
        <DataGridTextColumn Header="Beskrivelse" Binding="{Binding Path=Element[description].Value}" />
        <DataGridTextColumn Header="Pris" Binding="{Binding Path=Element[price].Value}" />
    </DataGrid.Columns>
</DataGrid>