1

有没有办法在 WPF/MVVM 中绑定突出显示的 ComboBox 项?

我想要这种行为的原因是我希望能够右键单击 ComboBox 项目并在 CommandParameter 中传递参数(与此相关的项目 ID)。

由于在我左键单击该项目之前实际上没有选择任何项目,因此我没有要传递的参数......

请问有什么想法吗?

<ComboBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete Expense Category" Command="{Binding DeleteMenuItemCommand}"
CommandTarget="{Binding HighlightedExpenseCategory}" CommandParameter="{Binding Id}"></MenuItem>
</ContextMenu>
</ComboBox.ContextMenu>
4

1 回答 1

2

首先是一个问题:您的最终目标是什么?您可以在不让用户右键单击上下文菜单项的情况下实现它吗?也许您可能想要的是一个分层组合框,如这里的图像中的任何想法如何实现 ComboBox 来表示分层数据?. 尽管如果您确实只想对组合框中的项目执行操作,这可能不适合您。

除此之外,HighCore 让你走上了正确的轨道(对不起,HighCore,我将在这里偷走你的一点风头,但作为安慰,我给你几票)。关键是 ContextMenu 是 ComboBoxItem 的属性,而不是 ComboBox 本身。

此代码片段可能会帮助您更进一步,尽管我没有在 XamlPad 之外进行测试。您可能需要一个额外的步骤来确保您的绑定可以使用命令以及菜单项的 Id 属性到达您的视图模型,无论您在哪里定义。尝试 Binding 的 RelativeSource,但如果您需要帮助,请回来。祝你好运!

<ComboBox>
   <ComboBox.Resources>
          <ContextMenu x:Key="contextMenu">
             <MenuItem Header="Delete Expense Category" Command="{Binding DeleteMenuItemCommand}"
              CommandTarget="{Binding HighlightedExpenseCategory}" CommandParameter="{Binding Id}" />
          </ContextMenu>
   </ComboBox.Resources>

   <ComboBox.ItemContainerStyle>
      <Style TargetType="{x:Type ComboBoxItem}">
         <Style.Setters>
            <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
         </Style.Setters>
      </Style>
   </ComboBox.ItemContainerStyle>
   <ComboBoxItem Content="1" />
   <ComboBoxItem Content="2" />
</ComboBox>
于 2013-04-19T17:07:45.013 回答