SilverLight: propiedad de modelo de vista de enlace MVVM a columna de cuadrícula de datos
-
22-07-2019 - |
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.
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>