que poner imágenes imagenes imagen estilo como cambiar atributos atributo .net wpf data-binding mvvm

.net - poner - Enlace a un comando en un datagrid



como poner atributo alt en wordpress (2)

Me gusta definir el modelo de vista en el contexto de datos del control con el nombre ViewModel. El enlace es más fácil de escribir utilizando ElementName

... <UserControl.DataContext> <local:UserControlViewModel x:Name="ViewModel"/> </UserControl.DataContext> ... ... <DataGridTemplateColumn Width="30"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding RemoveCommand, ElementName=ViewModel}" CommandParameter="{Binding}">Remove</Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> ...

Tenga en cuenta que en este caso, el parámetro de comando es el objeto de datos completo de la fila. En algún momento mejor que

CommandParameter="{Binding Id}"

Porque no tienes que encontrar datos de nuevo.

Estoy usando el patrón MV-VM en una aplicación WPF. Estoy vinculando un ViewModel a un ContentControl y utilizando una plantilla de datos definida en los recursos de la ventana para representar la vista (un UserControl) para ese ViewModel.

En el ViewModel, tengo una colección de artículos. Estoy vinculando esa colección a la cuadrícula de datos provista en el kit de herramientas de WPF. También en el modelo de vista, tengo un comando RemoveItem definido que toma un argumento para que se elimine la ID del artículo.

¿Cómo puedo enlazar a ese comando en la cuadrícula de datos? El contexto de datos de la cuadrícula es esa colección, así que algo como:

<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>

no funciona, no puede encontrar el comando. Creo que necesito hacer el enlace de RelativeSource, pero ¿qué aspecto tendría? ¿El tipo Ancestor sería UserControl o ContentControl? ¿Dónde reside mi ViewModel como DataContext?

¿O me voy de aquí?


Sí, solo necesitas subir un nivel. Primero intentaría un enlace con ElementName y recurriría a RelativeSource solo si fuera necesario. Por ejemplo, preferiría esto:

<DataGrid x:Name="_grid"> ... <Button Command="{Binding DataContext.RemoveItem, ElementName=_grid}"/> ... </DataGrid>

Dicho esto, el compilador XAML puede hacer que sus bragas se conviertan en un nudo cuando se trata de los nombres de elementos y el alcance de los controles, por lo que es posible que tenga que recurrir a un RelativeSource :

<DataGrid x:Name="_grid"> ... <Button Command="{Binding DataContext.RemoveItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}} }"/> ... </DataGrid>

Solo necesita buscar hasta que el contexto de datos sea su modelo de vista. Puede buscar un UserControl si lo desea, sin estar seguro de que realmente importe. Ambos son enlaces bastante frágiles, por lo que prefiero el enfoque ElementName .