2011-02-06 93 views
1

我使用VS 2010中的實體框架設計器創建了一個名爲「EmployeeName」的複雜類型。 EmployeeName包含名字,姓氏&標題。 現在的問題是我如何顯示/綁定到silverlight中的datagrid? 現在它在每行中顯示爲Datagrid中的「Namespace.EmployeeName」。在Silverlight Datagrid中綁定複雜類型

回答

2

首先,您需要在DataGrid上將AutoGenerateColumns設置爲false,以避免爲綁定對象的所有屬性獲取DataGridTextColumn的默認列類型。

然後,您需要在xaml中爲要顯示的綁定對象的每個屬性定義列。對於類似stringint(例如)的簡單類型的屬性,您可以在綁定屬性中使用帶有標準綁定的DataGridTextColumn

爲了您的複雜類型(EmployeeName),你需要使用一個DataGridTemplateColumn,然後定義一個DataTemplateDataGridTemplateColumn.CellTemplate屬性,它告訴列如何顯示的EmployeeName。這只是使用一個單一的TextBlockRunEmployeeName的每個屬性一個簡單的例子是如下

<sdk:DataGrid ItemsSource="{Binding MyCollection}" 
       AutoGenerateColumns="false"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock> 
         <Run Text="{Binding EmployeeName.Title}"></Run> 
         <Run Text="{Binding EmployeeName.FirstName}"></Run> 
         <Run Text="{Binding EmployeeName.LastName}"></Run> 
        </TextBlock> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 
+0

這裏假定Silverlight 4中Run的Text屬性是一個依賴屬性(因此是可綁定的)。如果您不使用4,則可以使用水平定向的StackPanel堆疊3個TextBlocks。 – 2011-02-06 22:41:44

0

您必須在XAML中創建每個列並將AutoGenerateColumns設置爲false,並使用每列的Binding屬性將每列手動綁定到要顯示的屬性。

http://www.wpftutorial.net/DataGrid.html

該網站有主題的更多信息。它是爲WPF設計的,但它也可以用於Silverlight;)

祝你好運,享受編程。

+0

感謝Drknezz它的工作。 – 2011-02-07 15:51:12