我想知道如何从菜单中获取“Selected”MenuItem。 基本上,我想获得“Selected”MenuItem,以便我可以对ListBox进行排序。 这是菜单的XAML。
<Menu>
<MenuItem Header="Sort by" ItemsSource="{Binding SortByOptions}"
*SelectedItem="{Binding GroupBy}"*/>
</Menu>
我使用菜单切换了我的ComboBox,但是在菜单中,“SelectedItem”不像ComboBox那样存在。我想知道如何才能从菜单中选择项目。
C#
ItemsSource绑定“SortByOptions”是一个字符串的ObservableCollection,其中包含要排序的选项。 绑定“GroupBy”是每次用户选择另一个MenuItem时设置的String。
每次用户选择另一个MenuItem时,我都会搜索设置变量“GroupBy”。
之前,我的ComboBox运作良好。
答案 0 :(得分:4)
<强>解强>
我需要像这样指定属性“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();
}
现在一切正常。