2010-08-10 15 views
9

Tengo una cuadrícula de datos con algunas columnas definidas y luego una plantilla de detalles de fila. ¿Cómo accedo a un control en la plantilla de detalles de la fila dentro del código? Tengo un botón que quiero habilitar/deshabilitar mediante programación, pero no puedo encontrar la manera de acceder al código subyacente. He visto esto en el MSDN:Cómo acceder mediante programación a un control de detalles de fila de cuadrícula de datos

http://msdn.microsoft.com/en-us/library/bb613579.aspx

pero eso es sólo la descripción de una plantilla de datos regular, así que cuando he intentado que no funcionó. Mi caso es una plantilla de datos de detalles de la fila. Seguramente alguien ha escrito un código para acceder a un control dentro de una plantilla de detalles de fila de cuadrícula de datos que puede comentar sobre esto (sería muy apreciado).

Respuesta

7

bien, me di cuenta de cómo conseguir este trabajo tuve que modificar el código que se ha escrito en este artículo de MSDN en la pregunta original ....

DataGridRow row = (DataGridRow)(KeywordsGrid.ItemContainerGenerator.ContainerFromItem(KeywordsGrid.SelectedItem)); 

// Getting the ContentPresenter of the row details 
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row); 

// Finding Remove button from the DataTemplate that is set on that ContentPresenter 
DataTemplate template = presenter.ContentTemplate; 
Button button = (Button)template.FindName("RemoveItemButton", presenter); 

"KeywordsGrid" es la variable ligada a mi red de datos Aviso en mi llamada a FindVisualChild, estoy usando una clase "DataGridDetailsPresenter" en lugar de un "ContentPresenter" (Esta fue la clave ... obligó al método FindVisualChild a iterar a través de todos los presentadores de contenido hasta que llegué a la para los detalles de la fila).

1

¿Se puede definir (o ya existe) una propiedad sobre el tipo de objeto que se muestra en la cuadrícula que representa el estado habilitado del botón? En caso afirmativo, sería mucho más simple modificar la plantilla de detalles de la fila para vincular la propiedad IsEnabled del botón a esa propiedad.

+0

Sí, en mi modelo de vista, yo podría tener una propiedad en el clase que se utiliza para la cuadrícula de datos. Entonces esta es una forma de hacerlo. Y también descubrí cómo hacerlo en el código detrás de la clase. Lo publicaré como una respuesta separada. ¡Gracias por su respuesta! – BrianP

1

Utilice el evento DataGrid.LoadingRowDetails! Es mucho más directo.

Me encontraron esta aquí: How to change Text of TextBlock which is in DataTemplate of Row Details for each DataGrid Row Details?

Ejemplo:

xaml

<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <TextBlock x:Name="Test">Test</TextBlock> 
     </DataTemplate> 
</DataGrid.RowDetailsTemplate> 

C#

private void dgVehicles_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) 
{ 
    TextBlock tbTest = e.DetailsElement.FindName("Test") as TextBlock; 
    if (tbTest != null) 
    { 
     tbTest.Text = "Juhuu"; 
    } 
} 
Cuestiones relacionadas