Pregunta

En mi aplicación SilverLight, tengo una propiedad en mi ViewModel llamada 'vmProperty' y una lista llamada 'dgSource'.

Ato mi dgSource a la cuadrícula de datos como ItemsSource, en cuyo punto el contexto de datos de cada fila de cuadrícula de datos cambia a cada elemento en dgSource. Una de las columnas, digamos una columna de casilla de verificación, debe vincularse a vmProperty. Pero dado que ViewModel ya no es el contexto de datos de la fila, no puedo acceder a esta propiedad.

¿Cómo soluciono este problema? Si la pregunta no está clara, hágamelo saber y publicaré una muestra. Gracias de antemano.

¿Fue útil?

Solución

Asumiendo que su ViewModel esté asignado como el LayoutRoot's DataContext esto debería funcionar: -

IsChecked="{Binding DataContext.vmProperty, ElementName=LayoutRoot}"

Por supuesto, esto no funciona, en última instancia, una plantilla se replica y, por lo tanto, "LayoutRoot" no existe en el ámbito de nombres donde se usa realmente el enlace.

La solución más simple ya que este es un ViewModel es cambiar el modelo. Exponga el valor requerido en los objetos disponibles en dgSource o exponga una propiedad Parent que navegue de regreso al ViewModel.

Otros consejos

Intente establecer la propiedad marcada de su columna de chechbox en eso:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClassName}}, Path=DataContext.vmProperty}

Eso significa que se encontrará el elemento padre cuyo tipo es su tipo de vista y que vmProperty de su DataContext se recuperará como valor.

ACTUALIZACIÓN:

Fue una solución para WPF.

Para Silverlight, creo que puedes intentar usar una construcción como esta:

{Binding Path=DataContext.vmProperty, ElementName=YourElement}

Donde DataContext of YourElement es una instancia de su modelo de vista. Creo que puede ser una cuadrícula, por ejemplo.

<Grid x:Name="YourElement" DataContext={Binding}>
<!-- DataGrid here -->
</Grid>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top