繁体   English   中英

当路径为SelectedItem时,为什么CommandParameter为null?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM