2009-11-30 4 views
2

나는 ContextMenu을 추가 한 ListBox을 가지고 있습니다. ContextMenu에있는 항목 중 하나를 명령에 바인딩하고이 명령에 전달 된 매개 변수를 ListBox 컨트롤의 현재 선택된 항목으로하고 싶습니다.도움말 소스를 명령 매개 변수로 바인딩

<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는 뷰 모델 객체에 바인딩 된 사용자 컨트롤의 일부입니다 : 여기 내 XAML입니다. 기본 객체에 대한 내 command 메소드가 호출되지만 전달 된 매개 변수는 항상 null입니다.

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