当AutogenerateColumns == True时,是否可以向DataGrid添加更多列?

时间:2013-10-18 14:08:22

标签: c# wpf xaml datagrid

简单地说,我的XML文件中有一个DataGrid,我绑定到一个列表 - 在本例中,是Person的列表。但是,我还想要一个额外的列,因为此列表中的所有条目都将成为Person的子类,即PersonWithAge。但我不允许更改ListOfPeople的类型。

如果我手动在XAML中添加列,它会立即崩溃。如何添加此列并将其与所有其他列同步?有没有办法在XAML文件中强制转换它?或者可以在m_grid_AutoGeneratingColumn方法中添加一个?

这是我的代码:

// In MyGridView.xaml.cs
public class MyGridView
{
    public ObservableCollection<Person> ListOfPeople { get; set; }

    private void m_grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    {
        /* Some formatting here... */
    }
}

public class Person
{
    public string Name { get; set; }
}

public class PersonWithAge : Person
{
    public int Age{ get; set; }
}

和XAML代码:

// MyGridView.xaml
<UserControl x:Class="Project.MyGridView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>    
         <DataGrid Name="m_myGrid" 
                   ItemsSource="{Binding ListOfPeople}
                   AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn" >
                <!--DataGridTextColumn Header="Age" /-->  <!-- This makes the thing crash -->
         </DataGrid >
    </Grid>
</UserControl>

1 个答案:

答案 0 :(得分:2)

DataGrid.Columns

中移动您要添加的列
    <DataGrid Name="m_myGrid" 
               ItemsSource="{Binding ListOfPeople}
               AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn" >
            <DataGrid.Columns>
               <DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
            </DataGrid.Columns>
     </DataGrid >