UserControl的DataContext绑定到NotesViewModel(ViewModel)实例,该实例具有名为AddNote的ICommand,因此ListBox的ContextMenu可以正常工作。
现在我想将DataTemplate中的ContextMenu作为ListBox,如何绑定{??????}?
以下部分代码:
<DataTemplate x:Key="contentTemplate">
<Border BorderThickness="0,0,0,1">
<Border.ContextMenu>
<ContextMenu>
<MenuItem Header="AddNote" Command="{??????}"></MenuItem> <!-- here -->
</ContextMenu>
</Border.ContextMenu>
<Grid>
<TextBlock Text="{Binding NoteContent}"></TextBlock>
</Grid>
</Border>
</DataTemplate>
<ListBox DockPanel.Dock="Top" x:Name="noteListBox"
ItemTemplate="{StaticResource contentTemplate}"
ItemsSource="{Binding Source={StaticResource notesViewSource}}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem x:Name="AddNoteMenu"
Header="AddNote"
Command="{Binding AddNote}"/> <!-- here works -->
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
答案 0 :(得分:2)
您可以使用 x:Reference 标记扩展程序进行绑定。
在listBox上设置x:Name
:
<ListBox x:Name="myListBox"/>
并使用x绑定:参考:
<MenuItem Header="AddNote" Command="{Binding DataContext.AddNote,
Source={x:Reference myListBox}}"/>
PS - 请勿与ElementName
绑定不起作用,因为ContextMenu与ListBox不在同一个Visual Tree中。因此,我们需要在这里使用x:Reference
。