2014-02-21 115 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)。 –

相關問題