【发布时间】:2011-02-20 09:54:19
【问题描述】:
我一直在尝试使用动态ContextMenu 来在其collection of objects 中显示每个对象的名称属性。
这是一个具体的例子,我正在连接到webservice 以提取特定帐户的contacts 和groups。所以我将它们作为global variables.i display the contacts in a listbox 和i want to show on right click of a contact in the listbox the list of groups that it can be added to。
为了能够将联系人添加到组中,我需要联系人的 id(我拥有),而我在这里寻找的组的 id 是我的代码。
xmlns:serviceAdmin="clr-namespace:MyWpfApp.serviceAdmin"
......
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Refresh" Click="RefreshContact_Click"></MenuItem>
<MenuItem Header="Add New Contact" Click="ContactNew_Click"></MenuItem>
<MenuItem Header="Add to Group" Name="groupMenus">
//<!--<MenuItem.Resources>
// <DataTemplate DataType="{x:Type serviceAdmin:groupInfo}" x:Key="groupMenuKey" >
// <MenuItem>
// <TextBlock Text="{Binding name}" />
// </MenuItem>
// </DataTemplate>
// </MenuItem.Resources>-->
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Header" Value="{Binding name}"/>
<Setter Property="MenuItem.Tag" Value="{Binding id}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="Delete Selected" Click="ContactDelete_Click"></MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
......
在 xaml.cs 上
//this code is in the method that loads the groups
loadedgroup = service.getGroups(session.key, null);
groupListBox.ItemsSource = loadedgroup;
groupMenus.ItemsSource = loadedgroup.ToList();
此代码正常显示组的名称,但我需要单击的组的 ID。
如果您注意到我评论了 xaml 代码的一部分。有了它,我可以(轻松)将 id 绑定到标签。但它不起作用,MenuItem.ItemContainerStyle 是一个工作,但后来我迷路了:
问题 1:如何为具有组名称的子菜单的单击事件创建处理程序方法?
问题 2:如何我得到点击的组 id 可以使用吗?
感谢您阅读并在此方面帮助我
【问题讨论】:
-
这个答案在 MenuItem 元素的上下文中也可能会有所帮助:stackoverflow.com/a/65669102/7313932
标签: c# wpf contextmenu binding