使用匿名类型集合在WPF中填充DataGrid

lex*_*eme 4 c# wpf datacontext datagrid anonymous-types

我正在使用匿名类型的集合填充datagrid(我正在设置DataGrid's DataContext属性).而且没有错误.并且在datagrid中没有任何内容.我已尝试使用已定义的对象集合进行相同的操作,但同样没有显示任何内容.请问你能告诉我该怎么做.

谢谢!

编辑1

好.我试图设置ItemsSource属性,它的工作原理.但是我得到了奇怪的结果..

在此输入图像描述

编辑2

我不知道怎么但是在3D发布之后它现在正常工作?

private void ShowABCResultsButtonOnClick(Object sender, RoutedEventArgs e)
{
    var anonArray = new List<NormalizedResult> 
    { 
        new NormalizedResult
        { 
            Key = 1,
            Title = "?????", 
            Volume = 1322.01m,
            Weighted = 6.7840m,
            Result = 6.7840m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 2,
            Title = "?????????? ?????", 
            Volume = 1250.47m,
            Weighted = 6.4169m,
            Result = 13.2009m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 3,
            Title = "?????-?????????", 
            Volume = 1202.1m,
            Weighted = 6.1687m,
            Result = 19.3695m,
            Group = "A"
        }
    };

    this.dataGrid2.ItemsSource = anonArray;
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码.

我再次启动..它只是第三次正确显示?



use*_*116 7

你可能需要做两件事.第一个,正如@Tim建议的那样,是将查询分配给DataGrid.ItemsSource属性.

myDataGrid.ItemsSource = from a in x
                         select new { Prop1 = a.A, Prop2 = a.B, ... };
Run Code Online (Sandbox Code Playgroud)

第二位将启用自动列生成DataGrid:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />
Run Code Online (Sandbox Code Playgroud)

编辑:我使用自动列生成和带有vanilla LINQ查询的匿名类型重新创建了您的图片.因此,您需要使用显式列来使用或切换到实际类型.

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Property 1"
                            Binding="{Binding Prop1}"/>
        <DataGridTextColumn Header="Property 2"
                            Binding="{Binding Prop2}"/>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

编辑2:您可以使用AutoGenerateColumns="True"不使用裸机IEnumerable<T>在哪里T是匿名类型.通过添加ToList问题就消失了.

myDataGrid.ItemsSource = (from m in typeof(int).GetMethods()
                          select new
                          {
                              Name = m.Name,
                              ReturnType = m.ReturnType.FullName
                          }).ToList();
Run Code Online (Sandbox Code Playgroud)

然后XAML回到:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

很确定你应该设置DataGrid ItemsSource.