En mi archivo XAML tengo un DataGrid con un menú contextual. La fuente de datos es un ViewModel que tiene una propiedad EntityCollection
(una ObservableCollection) como ItemsSource de DataGrid y otra colección ContextMenu.MenuItems
que sirve como origen de datos para crear un menú contextual en DataGrid. Los elementos de esa colección tienen un Command
propiedad que ato a la propiedad de comando de los elementos del menú:Enlazar un parámetro de comando de menú contextual a una propiedad de cuadrícula de datos
<DataGrid Name="EntityDataGrid" ItemsSource="{Binding EntityCollection}" Height="450">
<DataGrid.ContextMenu>
<ContextMenu ItemsSource="{Binding Path=ContextMenu.MenuItems}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
La acción para el comando de menú tiene la siguiente firma en el modelo de vista:
private void SelectedItemsAction(object parameter)
{
// Do something with "parameter"
}
Ahora mi problema es que alcanzo el SelectedItemsAction
cuando hago clic en un elemento del menú contextual, pero el parameter
es null
. Creo que mi problema está en el establecimiento de la propiedad CommandParameter
. Como se puede ver, quiero enlazar esta propiedad a la propiedad SelectedItems
de la cuadrícula de datos estableciendo el valor a: los valores más simples
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
que he probado como una prueba:
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=Height}" />
Aquí parameter
sigue siendo null
. Y a continuación, sólo para probar si algún parámetro alcanza mi método acción en absoluto:
<Setter Property="CommandParameter"
Value="10" />
Esto funciona, el parameter
en mi método de acción es ahora de hecho 10
.
¿Qué estoy haciendo mal para vincular el valor CommandParameter
a una propiedad de EntityDataGrid
? ¿Es posible?
¡Gracias por la ayuda con anticipación!
Genial, gracias, esto funciona! (Ahora solo necesito leer un poco más sobre el enlace de WPF para entender lo que su código está haciendo exactamente;)) – Slauma
Está caminando por el árbol para encontrar un artículo que coincida con ese tipo. El primero que lo usa lo usa como el contexto vinculante. – CodeWarrior
Mientras tanto, he leído más sobre encuadernación y ahora está claro por qué mi marcado original no funcionó y por qué su código es el correcto. ¡Gracias por la explicación! – Slauma