6

我想知道如何从菜单中获取“选定”菜单项。基本上,我想获得“选定的”MenuItem,这样我就可以对我的 ListBox 进行排序。这是我的菜单 XAML。

<Menu>
    <MenuItem Header="Sort by" ItemsSource="{Binding SortByOptions}"
                            *SelectedItem="{Binding GroupBy}"*/>
</Menu>

我用菜单切换了我的组合框,但在菜单中,“SelectedItem”不像在组合框中那样存在。我想知道我怎样才能从菜单中选择什么项目。

C#

ItemsSource 绑定“SortByOptions”是包含要排序的选项的字符串的 ObservableCollection。绑定“GroupBy”是每次用户选择另一个菜单项时设置的字符串。

每次用户选择另一个菜单项时,我都在搜索设置变量“GroupBy”。

以前,我的 ComboBox 运行良好。

4

1 回答 1

5

解决方案

我需要像这样指定属性“Command”和“CommandParameter”的样式:

<Menu Layout="Text" Margin="10,0,0,0">
  <MenuItem Header="Group by" ItemsSource="{Binding GroupByOptions}">
    <MenuItem.ItemContainerStyle>
      <Style TargetType="{x:Type MenuItem}">
        <Setter Property="Command"
                Value="{Binding ViewModel.GroupCommand, RelativeSource={RelativeSource AncestorType={x:Type Views:MyView}}}" />
        <Setter Property="CommandParameter" Value="{Binding}" />
      </Style>
    </MenuItem.ItemContainerStyle>
  </MenuItem>
</Menu>

请注意,CommandParameter 是用户选择的实际“标题”。(这就是我要搜索的内容)我不知道,但是当您执行 {Binding} 时,它需要实际的字符串。

在我的 ViewModel 中,它看起来是这样的:

private ICommand mSortCommand;
//Implement get and set with NotifyPropertyChanged for mSortableList
private ICollectionView mSortableList; 

public ICommand SortCommand
{
  get { return mSortCommand ?? (mSortCommand = new RelayCommand(SortMyList)); } 
}

public void SortMyList(object sortChosen)
{
  string chosenSort = sortChosen as string;
  CampaignSortableList.SortDescriptions.Clear();
  Switch(chosenSort){
    "Sort my List"
  }
  CampaignSortableList.Refresh();
}

现在一切正常。

于 2013-05-14T21:04:04.740 回答