2013-09-30 83 views
0

假設你編寫了一個類Person的代碼,其屬性由原始類型組成,其類型均爲基本類型Address。您將多個Person對象放在ObservableCollection中,並且您想將其綁定到DataGrid。具有原始類型的屬性將正常顯示,但屬性Address(即由原始類型組成的類)將只顯示「(Collection)」。如何將DataGrid綁定到數據源的二級屬性?

我發現一個solution這個問題,而谷歌搜索,但它似乎很多工作的一點功能。我找到的解決方案是爲DataGridView,它的日期爲2007年。現在有更簡單的方法,我們可以使用WPF和DataGrid還是難度一樣?

示例代碼:

class Person 
{ 
    private string id; 
    private string name; 
    private Address homeAddr; 

    public string ID 
    { 
      get { return id;} 
      set { id = value;} 
    } 

    public string Name 
    { 
      get { return name;} 
      set { name = value;} 
    } 

    public Address HomeAddr 
    { 
      get { return homeAddr;} 
      set { homeAddr = value;} 
    } 
} 

class Address 
{ 
    private string cityname; 
    private string postcode; 

    public string CityName 
    { 
     get { return cityname;} 
     set { cityname = value;} 
    } 

    public string PostCode 
    { 
     get { return postcode;} 
     set { postcode = value;} 
    } 
} 
+0

你怎麼想要顯示的地址?郵政編碼和城市在一個列或每個自定義單元格中同時擁有? –

+0

每列中有一列。 – TheKobra

回答

2
<DataGrid> 
    <DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Id}"/> 
    <DataGridTextColumn Binding="{Binding Name}"/> 
    <DataGridTextColumn Binding="{Binding HomeAddr.CityName}"/> 
    <DataGridTextColumn Binding="{Binding HomeAddr.PostCode}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

我現在看到,很好的答案。 – paqogomez

0

爲什麼你不能直接添加的地址到你的DataGrid列的原因是因爲該列預計基本類型,你發送一個「地址」類型的對象。 要解決這個問題,您必須創建一個Converter,它將Address對象轉換爲基本類型,如字符串。

首先添加轉換器在資源字典

<src:AddressToStringConverter x:Key="AddressToStringConverter" /> 

,之後在電網使用它

<DataGrid> 
    <DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Id }"/> 
    <DataGridTextColumn Binding="{Binding Name}"/> 
    <DataGridTextColumn Binding="{Binding HomeAddr, Converter={StaticResource AddressToStringConverter}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

在這裏你可以找到更多關於轉換器:http://wpftutorial.net/ValueConverters.html

相關問題