动态地将MenuItem与List中的项关联起来
本文关键字:关联 起来 List MenuItem 动态 | 更新日期: 2023-09-27 18:16:07
我正在使用c#,我有一个对象列表,我想在上下文菜单中显示所有对象,每个对象显示为MenuItem
。
当一个MenuItem被点击时,我想在MenuItem_Click()
函数中引用相关的对象。
List<MyObject> MyList = new List<MyObject>();
ContextMenu menu = new ContextMenu();
foreach(MyObject o in MyList)
{
MenuItem item = new MenuItem();
item.Header = o.Name;
item.Click += MenuItem_Click;
menu.Items.add(item);
}
menu.IsOpen=true;
void MenuItem_Click(object sender, RoutedEventArgs e){
// Assume the 5th MenuItem is clicked, I need to refer to the 5th object in MyList
// how to do it?
}
适合当前代码的快速肮脏hack:使用Tag
属性。
foreach(MyObject o in MyList)
{
MenuItem item = new MenuItem();
item.Header = o.Name;
item.Tag = o;
item.Click += MenuItem_Click;
menu.Items.add(item);
}
那么你可以这样引用它:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var myObj = (MyObject)((MenuItem)sender).Tag;
}
可以通过
访问MenuItem nItem = sender as MenuItem;
var clickedItem = e.OriginalSource as MenuItem;
MyObject myObj = MyList.Find(o => o.Name == clickedItem.Header);