【问题标题】:MVVM Set MenuItem's DataContextMVVM 设置 MenuItem 的 DataContext
【发布时间】:2012-12-27 18:25:41
【问题描述】:

我有一个 ListView,其中包含来自字符串列表的 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>

【问题讨论】:

  • 如果您不发布您已尝试过的帖子,将很难为您提供帮助。贴出你的viewModel代码,你可以尝试使用snoop查看绑定错误

标签: c# xaml mvvm datacontext menuitem


【解决方案1】:

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

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

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

这应该尝试获取应该继承 UserControl 的 DataContext 的放置目标(在您的情况下为 ListView)的 DataContext

希望这会奏效。

【讨论】:

  • 猜猜这可以将 MenuItem 的 DataContext 设置为 ContextMenu 的 DataContext。但是ContextMenu的DataContext还是System.String。我尝试使用 将其设置在 ContextMenu 上,但这仍然对我不起作用。现在是 DataContext object.null
猜你喜欢
  • 2010-11-24
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多