帮助将命令参数绑定到相对源

时间:2009-11-30 19:51:05

标签: wpf data-binding listbox commandbinding

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

<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是绑定到视图模型对象的用户控件的一部分。调用底层对象的命令方法,但传入的参数始终为null。

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

帮助?

2 个答案:

答案 0 :(得分:3)

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

<MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}" CommandParameter="{Binding ElementName=selectedVascularBeds, Path=SelectedItem}"/>

答案 1 :(得分:1)

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

  

System.Windows.Data错误:4:找不到绑定源   引用'ElementName = selectedVascularBeds'。   BindingExpression:路径= DataContext的;的DataItem = NULL;目标元素是   'MenuItem'(Name =''); target属性是'CommandParameter'(类型   '对象')

搜索该错误导致我进入此链接,看起来上下文菜单不同,我无法实现我想要的方式。

ElementName Binding from MenuItem in ContextMenu