WPF MVVM - 在Combobox中绑定突出显示的项目

时间:2013-04-19 14:36:59

标签: wpf mvvm

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

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

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

请问?

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

1 个答案:

答案 0 :(得分:2)

首先提出一个问题:您的最终目标是什么?您可以在没有用户右键单击上下文菜单项的情况下进行处理吗?也许您可能想要的是一个分层组合框,如图中的Any ideas how to implement ComboBox to represent hierarchical data?。虽然如果您确实只想对组合框中的项目执行操作,这可能不适合您。

除此之外,然后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>