如何在DataTemplate中将Command绑定到ParentControl的ViewModel(为ListBox的ItemsTemplate绑定)

时间:2014-02-21 09:18:38

标签: wpf xaml mvvm

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>

1 个答案:

答案 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