MVVM设置MenuItem的DataContext

时间:2012-12-27 18:25:42

标签: c# xaml mvvm datacontext menuitem

我有一个ListView,其中包含一个来自List of string的ItemSource。 现在我添加了一个上下文菜单,它应该只实现一些命令。但问题是如何设置DataContext。找到了一些解决方案,但这些都不适用于我。不知道我的错在哪里。

这里我的XAML代码缩减为重要区域。

    <ListView x:Name="lstBackups" ItemsSource="{Binding SelectedClient.Backups}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="ContextMenu">
                    <Setter.Value>
                        <ContextMenu>
                            <MenuItem Header="Do Something"                                           DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                                      cinch:SingleEventCommand.RoutedEventName="MouseLeftButtonUp"
                                      cinch:SingleEventCommand.TheCommandToRun="{Binding Path=DataContext.OpenBackupInExplorerCommand, ElementName=UserControl}">
                            </MenuItem>
                        </ContextMenu>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

1 个答案:

答案 0 :(得分:2)

我确定你已经注意到ContextMenu不是你用户控件的同一个可视树的一部分(我知道这很烦人)。所以你必须对你的绑定逻辑有所启发。

尝试将命令绑定更改为以下

cinch:SingleEventCommand.TheCommandToRun="{BindingPath=PlacementTarget.DataContext.OpenBackupInExplorerCommand, 
                                           RelativeSource={RelativeSource FindAncestor, 
                                                                          AncestorType={x:Type ContextMenu}}}"

那应该尝试获取放置目标的DataContext(在你的情况下是ListView),它应该继承UserControl的DataContext

希望这会奏效。