2014-02-21 41 views
0

UserControl的DataContext绑定到具有ICommand名为AddNote的NotesViewModel(ViewModel)实例,因此ListBox的ContextMenu可以工作。如何将命令绑定到DataTemplate中的ParentControl的ViewModel(为ListBox的ItemsTemplate绑定)

现在我想的文本菜单中的DataTemplate工作作为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> 

回答

2

可以绑定使用x:Reference标记扩展。在你的列表框

x:Name

<ListBox x:Name="myListBox"/> 

,并用x绑定:参考:

<MenuItem Header="AddNote" Command="{Binding DataContext.AddNote, 
              Source={x:Reference myListBox}}"/> 

PS - 请不ElementName绑定将无法工作,因为文本菜单不说谎在与ListBox相同的可视化树中。因此,我们需要在这里使用x:Reference

+0

它的工作原理!非常感谢! – san

+0

@san:你应该接受这个答案为。 –

+0

@san - 欢迎你的SAN。欢迎来到SO并接受它作为答案。 [如何接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

相关问题