【问题标题】:WPF Bind DataGrid to XElement Attribute valueWPF 将 DataGrid 绑定到 XElement 属性值
【发布时间】:2014-06-17 11:34:55
【问题描述】:

我正在尝试将一些 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();
    }

是否可以将列绑定到属性值?如果有,怎么做?

还有没有更优雅的方式来绑定列,可能来自后面的代码?

【问题讨论】:

  • 显示你的 XML 结构.. 相信我从代码隐藏绑定不会更漂亮

标签: xml wpf xelement


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 2010-12-01
    • 2013-02-28
    相关资源
    最近更新 更多