【问题标题】:wpf datagrid bound to xml data cannot autogenerate columns?绑定到 xml 数据的 wpf datagrid 无法自动生成列?
【发布时间】:2012-11-13 07:33:21
【问题描述】:

我想知道为什么我不能让我的 wpf 数据网格自动生成列。属性 AutogerenateColumns 设置为 true。也许这与我没有将 itemssource 绑定到类而是绑定到 XElement 的事实有关。如果可能有限制?我找不到有关此的任何信息。谢谢

这是 xaml:

    <DataGrid
        x:Name="grid"
        Grid.Row="3"
        Grid.Column="2"
        HorizontalAlignment="Left"
        ItemsSource="{Binding Path=Elements[person]}"
        DataContext="{Binding Path=ResourceFileGroupMerged}"
        AutoGenerateColumns="True">
    </DataGrid>

在 ViewModel 中:

    public MainWindowViewModel()
    {
               ResourceFileGroupMerged = XElement.Load(@"c:\test.xml");
    }

【问题讨论】:

    标签: wpf xml data-binding datagrid


    【解决方案1】:

    我认为您必须手动添加列,因为 DataGrid 会使用 XmlElement 的属性(例如 NodeType、OwnerDocument 等)作为自动生成的列。您应该在绑定中使用 XPath 而不是 Path

            <DataGrid ItemsSource="{Binding XPath=Elements/person}" AutoGenerateColumns="False" DataContext="{Binding Path=ResourceFileGroupMerged}" >
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding XPath=@prop1}" />
                    <DataGridTextColumn Binding="{Binding XPath=@prop2}" />
                </DataGrid.Columns>
            </DataGrid>
    

    其中@prop1@prop2person XmlElement 的属性。

    【讨论】:

    • 感谢您的回答。我知道它适用于 AutogeneratedColumns=False。我的问题是为什么(如果)它不适用于 AutogeneratedColumn = True。我的问题是我事先不知道有多少列,所以我无法在 xaml 中显式添加列。
    • @user1472131 可能是因为默认情况下,绑定会查找对象中的公共属性,正如我之前提到的。恐怕您必须使用代码隐藏在运行时添加列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多