Параметр команды привязки справки к относительному источнику

У меня есть 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 SelectedItem.

Помощь?


person Joe    schedule 30.11.2009    source источник


Ответы (2)


контекстное меню не является потомком списка. попробуйте вместо этого привязку имени элемента

<MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}" CommandParameter="{Binding ElementName=selectedVascularBeds, Path=SelectedItem}"/>
person Aran Mulholland    schedule 01.12.2009

Привязка ElementName также не работала, параметр все еще был нулевым, и я обнаружил ошибку в выводе консоли:

System.Windows.Data Ошибка: 4: не удается найти источник для привязки со ссылкой "ElementName = selectedVascularBeds". BindingExpression: Path = DataContext; DataItem = null; целевой элемент - MenuItem (Name = ''); целевое свойство - CommandParameter (тип Object)

Поиск этой ошибки привел меня к этой ссылке, и похоже, что контекстное меню другое, и я не могу добиться того, чего хочу, так, как я это делаю.

Привязка имени элемента из MenuItem в ContextMenu

person Joe    schedule 01.12.2009