2

我有一个ListBox我已经添加ContextMenu到的。我希望将其中的一项ContextMenu绑定到命令,并且我希望传递给该命令的参数成为ListBox控件的当前选定项。这是我的xml:

<ListBox x:Name="selectedVascularBeds"             
         ItemsSource="{Binding Path=UserSelectedVascularBeds}"                    
         dd:DragDrop.IsDropTarget="True"
         dd:DragDrop.DropHandler="{Binding}"            
         DisplayMemberPath="VascularBedName">
    <ListBox.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}"
                      CommandParameter="{Binding RelativeSource={RelativeSource 
                                         Mode=FindAncestor,
                                         AncestorType={x:Type ListBox}},
                                         Path=SelectedItem}"/>
        </ContextMenu>
    </ListBox.ContextMenu>
</ListBox>                      

ListBox是绑定到视图模型对象的用户控件的一部分。我在底层对象上的命令方法被调用,但传入的参数始终为空。

我已经测试了将绑定更改CommandParameter为简单地{Binding}导致用户控件的数据上下文被传递到我的方法中 - 所以我知道该命令正在工作并正确传递参数。我似乎无法获得正确的绑定来访问ListBox'SelectedItem属性。

帮助?

4

2 回答 2

3

上下文菜单不是列表框的后代。尝试使用元素名称绑定

<MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}" CommandParameter="{Binding ElementName=selectedVascularBeds, Path=SelectedItem}"/>
于 2009-12-01T00:18:12.843 回答
1

ElementName 绑定也不起作用,参数仍然为空,我在控制台输出中发现错误:

System.Windows.Data 错误:4:找不到与引用“ElementName=selectedVascularBeds”进行绑定的源。绑定表达式:路径=数据上下文;数据项=空;目标元素是'MenuItem'(名称='');目标属性是“CommandParameter”(类型“对象”)

搜索该错误将我带到此链接,但看起来上下文菜单不同,我无法实现我想要的方式。

ContextMenu 中 MenuItem 的 ElementName 绑定

于 2009-12-01T17:34:39.780 回答