2009-11-30 89 views
2

我有一個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屬性。

幫助?

回答

3

上下文菜單不是列表框的後代。嘗試的元素名稱,而不是結合

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

的的ElementName綁定還沒有工作,參數仍然是零,我發現了一個錯誤的控制檯輸出:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=selectedVascularBeds'. BindingExpression:Path=DataContext; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'CommandParameter' (type 'Object')

搜索該錯誤導致我到這個鏈接,但它看起來像上下文菜單是不同的,我不能達到我想要的方式,我要去做它。

ElementName Binding from MenuItem in ContextMenu