gpt4 book ai didi

.net - 将上下文菜单命令参数绑定(bind)到数据网格属性

转载 作者:行者123 更新时间:2023-12-02 12:22:42 27 4
gpt4 key购买 nike

在我的 XAML 文件中,我有一个带有上下文菜单的 DataGrid。数据源是一个 ViewModel,它有一个属性 EntityCollection(ObservableCollection)作为 DataGrid 的 ItemsSource,还有另一个集合 ContextMenu.MenuItems 作为数据源来创建DataGrid 上的上下文菜单。该集合的元素有一个 Command 属性,我将其绑定(bind)到菜单项的 Command 属性:

<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>

菜单项命令的操作在 ViewModel 中具有以下签名:

private void SelectedItemsAction(object parameter)
{
// Do something with "parameter"
}

现在我的问题是,当我单击上下文菜单项时,我会到达 SelectedItemsAction,但 parameternull。我相信我的问题出在 CommandParameter 属性的 setter 中。正如您所看到的,我想将此属性绑定(bind)到 DataGrid 的 SelectedItems 属性,方法是将值设置为:

<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />

我尝试了更简单的值作为测试:

<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=Height}" />

这里参数仍然是null。然后只是测试是否有任何参数到达我的操作方法:

<Setter Property="CommandParameter"
Value="10" />

这有效,我的操作方法中的参数现在确实是10

CommandParameter 值绑定(bind)到 EntityDataGrid 的属性时我做错了什么?这可能吗?

感谢您提前提供帮助!

最佳答案

ContextMenu 不在可视化树的同一部分,因此您不能使用 ElementName 等来引用 DataGrid。您必须改用 ContextMenuPlacementTarget。像这样尝试一下

<ContextMenu ItemsSource="{Binding Path=ContextMenu.MenuItems}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},
Path=PlacementTarget.SelectedItems}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>

关于.net - 将上下文菜单命令参数绑定(bind)到数据网格属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com