Помогите привязать параметр команды к относительному источнику - PullRequest
2 голосов
/ 30 ноября 2009

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

Помощь

Ответы [ 2 ]

3 голосов
/ 01 декабря 2009

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

<MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}" CommandParameter="{Binding ElementName=selectedVascularBeds, Path=SelectedItem}"/>
1 голос
/ 01 декабря 2009

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

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

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

Связывание ElementName из MenuItem в ContextMenu

...