2012-05-21 22 views
1

我目前的任務是爲WPF應用程序構建一個類似電子表格的GUI,我遇到了一些問題。實質上,我想在列的基礎上綁定到數據網格,以便一列包含某年的數據。因此,鑑於2006年是開始年和2009年結束年,我希望每列有4列顯示特定年份的值。綁定到WPF DataGrid - 每列一個實體

這是我在後臺代碼現在:

private Years m_YearsList; 

    public Years YearsList 
    { 
     get { return m_YearsList; } 
     set { m_YearsList = value; } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     YearsList = LoadData(); 

     TestGrid.DataContext = YearsList; 
    } 

    public Years LoadData() 
    { 
     var personer = new Years{ 
      new Year 
       { 
        Taxed = new Taxed {TaxedField = 10}, 
        NumBuildings = new BuildingsCollection {NumBuildings = 25}, 
        Area = new Area{AreaField = "NoWhere"}, 
        DisplayName = "Person1" 
       }, 
      new Year 
       { 
        Taxed = new Taxed{TaxedField = 2}, 
        NumBuildings = new BuildingsCollection{NumBuildings = 8}, 
        Area = new Area{AreaField = "SomeWhere"}, 
        DisplayName = "Person2" 
       }, 
       new Year 
       { 
        Taxed = new Taxed{TaxedField = 18}, 
        NumBuildings = new BuildingsCollection{NumBuildings = 20}, 
        Area = new Area{AreaField = "UpThere"}, 
        DisplayName = "Person3" 
       } 
     }; 

     return personer; 
    } 
} 

年度的對象只是封裝兩個int的和一個字符串。歲月的對象是我打出了絕望看起來像這樣:

public class Years : List<Year>{} 

我的XAML:

<DataGrid x:Name="TestGrid" ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=NumBuildings}" /> 
     <DataGridTextColumn Binding="{Binding Path=Taxed}" /> 
     <DataGridTextColumn Binding="{Binding Path=Area}" /> 
    </DataGrid.Columns> 
</DataGrid> 

此代碼生成此:

Result View

正如你所看到的, Year對象綁定到每個列的一個屬性,而我基本上希望將它們綁定到一個對象,並且所有屬性都放在一個列中。不幸的是我的WPF技能缺乏。 :(

回答

1

我發現this article談論創建一個數據表並轉置它(即交換列的行),然後綁定該對象到數據網格。所以編寫一個方法,從您的集合創建一個轉置的數據表並綁定這個表中數據網格。

的問題是,這不會真正更新,因此,如果您的數據應該由DataGrid中的用戶進行編輯,然後你還挺有問題。

你可以直接更改數據源,或者您可能需要編輯數據網格的ControlTemplate。

+0

謝謝!將檢查文章,看看我是否得到任何地方。如果是,我會更新。 – Henric