其他分享
首页 > 其他分享> > CodeGo.net>我如何在WPF中获得“选定的菜单项”

CodeGo.net>我如何在WPF中获得“选定的菜单项”

作者:互联网

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

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

我使用菜单切换了ComboBox,但是在Menu中,“ SelectedItem”不像ComboBox那样存在.我想知道如何从菜单中选择哪个项目.

C#

ItemsSource绑定“ SortByOptions”是一个ObservableCollection字符串,其中包含要排序的选项.
绑定“ GroupBy”是一个字符串,每次用户选择另一个MenuItem时都会设置该字符串.

每当用户选择另一个MenuItem时,我都在搜索设置变量“ GroupBy”.

以前,我的ComboBox运作良好.

解决方法:

我需要像这样指定属性“ 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是用户选择的实际“ Header”. (这就是我要搜索的内容)我不知道,但是当您执行{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();
}

现在一切正常.

标签:wpf-controls,xaml,c
来源: https://codeday.me/bug/20191031/1971990.html