![](/img/trans.png)
[英]MVVM SelectedItem of DataGrid shows as null when setting it as CommandParameter and recieving it
[英]Why is my CommandParameter null when I have the Path as SelectedItem?
因此,我试图将SelectedItem
作为参数传递,以便可以使用绑定到它的数据。
本质上,我想打开一个MessageBox
并显示绑定到该项目的User的Name
属性。
这是我的xaml
<ItemsControl ItemsSource="{Binding CardViewModel.Users}"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultEffectDataTemplate="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:UserCard>
<controls:UserCard.ContextMenu>
<!-- Bind the DataContext of the CM to the DataContext that's bound to the RootObject-->
<ContextMenu DataContext="{Binding DataContext, Source={local:RootObject}}">
<MenuItem Header="Edit"
Command="{Binding CardViewModel.EditUser}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},
Path=PlacementTarget.SelectedItem}"/>
</ContextMenu>
</controls:UserCard.ContextMenu>
</controls:UserCard>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
该命令运行正常,所有内容都绑定良好,除了单击MenuItem
并触发该命令时,我在操作所在的位置放置了一个断点,并将参数显示为null
我怀疑是我将其绑定错误。
public void DisplayEditUser(object user)
{
if (user != null)
{
MessageBox.Show("Not null");
}
}
问题在于ContextMenu.PlacementTarget
不是ItemsControl
而是UserCard
,因此绑定源解析绝对会失败。 要解决此问题,您需要将ItemsControl.SelectedItem
绑定到UserCard
一个属性(例如Tag
作为中继。
<controls:UserCard Tag="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=ListBox}}">
CommandParameter="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.