2013-10-18 54 views
0

簡而言之,我在我的XML文件中有一個DataGrid,我綁定了一個列表 - 在本例中,列表爲Person s。但是,我還想要一個額外的列,因爲此列表中的所有條目都將是Person的子類,即PersonWithAge。不過,我不允許更改ListOfPeople的類型。當AutogenerateColumns == True時,是否可以向DataGrid添加更多列?

如果我手動在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> 
+0

OK,你不能改變ListOfPeople但可以在創建一個新的列表。公共IEnumerable ListOfPeopleWithAge {獲得{返回ListOfPeople.OfType (); }} – Paparazzi

+0

我看到你的想法,但一個'ObservableCollection'似乎沒有'OfType'方法,是嗎? – Yellow

+0

但是如果有辦法將它從一個扔到另一個,那就太棒了。但簡單地轉換給了我這個錯誤:'不能將類型'ObservableCollection '轉換爲'ObservableCollection ' – Yellow

回答

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 > 
+0

不錯,這部分工作!雖然這樣,該列還沒有綁定到「Age」屬性。你能以這種方式訪問​​嗎? – Yellow

+0

offcourse,只要綁定到Age屬性,您的項目就會包含Age屬性,即使它派生它包含Age屬性。 – Nitin

+0

Whauh,那實際上工作!我不知道你能做到這一點。我期望一些編譯時錯誤,因爲'Age'不可見,但它並不在乎並且工作正常。 :-) – Yellow

相關問題