2011-07-12 22 views
6

Tengo un problema simple al vincular una entidad a la cuadrícula de datos en wpf.wpf datagrid databind con objetos anidados (como el detalle maestro)

Tengo una entidad llamada "Usuario" .... y cada "Usuario" tiene un "Grupo de trabajo" ... la relación entre los dos es uno a uno.

ahora en EF cada entidad de usuario tiene una entidad de grupo de trabajo adentro.

cuando quiero unir Colección Usuarios de cuadrícula de datos no tengo idea caliente para decir que usted tiene que poner porejemplo workgroup.Title dentro de una columna de cuadrícula de datos

Estoy tratando de unir de esta manera:

XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Users}" HorizontalAlignment="Stretch" Margin="5" Name="dgUserList" VerticalAlignment="Stretch" SelectionChanged="dgUserList_SelectionChanged"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName" /> 
        <DataGridTextColumn Binding="{Binding LastName}" Header="LastName" /> 
        <DataGridTextColumn Binding="{Binding Username}" Header="UserName" /> 
        <DataGridTextColumn Binding="{Binding WorkGroup}" Header="Workgroup" /> 
       </DataGrid.Columns> 
      </DataGrid> 

código subyacente: Creado una propiedad como esta:

public List<User> Users 
    { 
     get { return dal.GetUsers(); } 
    } 

y que la unión:

private void BindGrid() 
    { 
     dgUserList.ItemsSource = Users; 
    } 

este archivo de trabajo con propiedades directas de usuario Entidad sino que pone el tipo de entidad de grupo de trabajo dentro de la columna de la cuadrícula de datos y la razón es obvia. Quiero poner el Título de grupo de trabajo dentro de

¿cómo puedo lograr esto?

cualquier ayuda sería muy apreciada

Respuesta

8
propiedades

WPF Bindings apoyo anidados de modo para llegar a cualquiera de los sub-propiedades en una propiedad de un objeto dependiente sólo tiene que utilizar normal "" sintaxis:

<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" /> 

Tampoco necesita configurar el ItemsSource dos veces. Si tiene el DataContext de DataGrid configurado como la ventana (o UserControl, etc.) cuyo código subyacente declaró la propiedad de los usuarios, entonces la vinculación ItemsSource en XAML es suficiente y puede eliminar el método BindGrid. Si no ha configurado DataContext, XAML ItemsSource Binding no está haciendo nada (probablemente pueda ver un mensaje de error en su salida de depuración) para que pueda eliminar eso y simplemente deje que el método de código subyacente se encargue de eso.

También debería considerar el uso de un ObservableCollection para obtener notificaciones automáticas y actualizaciones de la UI cuando se agregan o eliminan elementos. Como ya está utilizando EF, también puede usar EntityCollection for User, que incluye la misma notificación automática de INotifyCollectionChanged.

+0

gracias John eres bueno – Pouyan