2011-02-06 90 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