【问题标题】:Help binding command parameter to relative source帮助将命令参数绑定到相关源
【发布时间】:2010-12-21 18:36:33
【问题描述】:

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

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

帮助?

【问题讨论】:

    标签: wpf data-binding listbox commandbinding


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      ElementName Binding from MenuItem in ContextMenu

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-18
        • 2023-03-15
        • 2011-01-10
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多