2013-04-24 254 views
3

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

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

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

C#

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

我正在搜索设置变量“GroupBy”,每次用户选择另一个MenuItem。

之前,我的ComboBox运行良好。

+0

[MenuItem.Checked](http://msdn.microsoft.com/en-us/library/system.windows.forms.menuitem.checked.aspx)?您可以遍历菜单上的所有项目,并检查每个项目是否为真。如果是,则该项目已被选中。 – tnw 2013-04-24 20:47:28

+0

请修改您的问题以阐明您所选菜单项的含义。你想把最近使用过的命令放在最上面,还是其他的东西? – RogerN 2013-04-24 20:58:40

+0

在我看来,菜单好像是ComboBox的替代品。请你提供一些更详细的信息,你想要完成什么,为什么.. – Niclas 2013-04-24 21:44:25

回答

4

SOLUTION

我需要指定属性的样式“命令”和“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(); 
} 

现在它所有的罚款。

相关问题