Заполнение DataGrid в WPF анонимной коллекцией типов


Я заполняю datagrid коллекцией анонимных типов (я устанавливаю свойство DataGrid's DataContext). И нет никаких ошибок. И в датагриде ничего не изменилось. Я попытался сделать то же самое с определенной коллекцией объектов, но снова ничего не отображается. Пожалуйста, объясните мне, что делать.

Спасибо!

Правка 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;
}

Это мой код.

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



3 4

3 ответа:

Вам, вероятно, нужно сделать две вещи. Первый, , как предложил @Tim , присваивает запрос свойству DataGrid.ItemsSource.

myDataGrid.ItemsSource = from a in x
                         select new { Prop1 = a.A, Prop2 = a.B, ... };

второй бит будет включать автоматическую генерацию столбцов на вашем компьютере.DataGrid:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />

Edit : я воссоздал вашу фотографию, используя автоматическую генерацию столбцов и анонимные типы с помощью запроса 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>

Edit 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();

XAML затем возвращается к:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />

Вполне уверен, что вы должны установить Datagrid'S ItemsSource вместо этого.

Пожалуйста, убедитесь, что вы используете то же имя свойств вашего анонимного объекта при привязке его в таблице данных и убедитесь, что коллекция содержит элементы.