在Silverlight Datagrid中绑定复杂类型

时间:2011-02-06 16:06:50

标签: silverlight types complextype

我使用VS 2010中的Entity Framework设计器创建了一个名为“EmployeeName”的复杂类型。 EmployeeName由FirstName,LastName&标题。 现在问题是如何在silverlight中显示/绑定到datagrid? 现在,它在Datagrid中显示为每行中的“Namespace.EmployeeName”。

2 个答案:

答案 0 :(得分:2)

首先,您需要在DataGrid上将AutoGenerateColumns设置为false,以避免为绑定对象的所有属性获取默认列类型DataGridTextColumn。

然后,您需要在xaml中为要显示的绑定对象的每个属性定义列。对于具有简单类型(如stringint的属性(例如),您可以在绑定属性中使用带有标准绑定的DataGridTextColumn

对于您的复杂类型(EmployeeName),您需要使用DataGridTemplateColumn,然后为DataTemplate属性定义DataGridTemplateColumn.CellTemplate,告知列如何显示EmployeeName。对TextBlock的每个属性使用单个RunEmployeeName的简单示例如下

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

答案 1 :(得分:0)

您必须在XAML中创建每个列并将AutoGenerateColumns设置为false,并使用每列的Binding属性手动将每个列绑定到要显示的属性。

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

该网站在该主题中有更多信息。它是为WPF设计的,但它也适用于Silverlight;)

祝你好运并享受编程。