C# · 12月 31, 2021

c# – 如何在WPF中的数据绑定菜单中处理点击事件

我有一个MenuItem,ItemsSource是数据绑定到一个简单的字符串列表,它正确显示,但我很难看到我如何处理他们的点击事件!

这是一个简单的应用程序,演示它:

<Window x:Class=”WPFDataBoundMenu.Window1″xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”Title=”Window1″ Height=”300″ Width=”300″><Grid> <Menu> <MenuItem Header=”File” Click=”MenuItem_Click” /> <MenuItem Header=”My Items” ItemsSource=”{Binding Path=MyMenuItems}” /> </Menu></Grid> using System.Collections.Generic;using System.Windows;namespace WPFDataBoundMenu{ /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window { public List<string> MyMenuItems { get; set;} public Window1() { InitializeComponent(); MyMenuItems = new List<string> { “Item 1″,”Item 2″,”Item 3” }; DataContext = this; } private void MenuItem_Click(object sender,RoutedEventArgs e) { Message@R_137_2419@.Show(“how do i handle the other clicks?!”); } }}

非常感谢!

克里斯.

解决方法 <MenuItem Header=”My Items” ItemsSource=”{Binding Path=MyMenuItems}” Click=”DataBoundMenuItem_Click” />

代码背后..

private void DataBoundMenuItem_Click(object sender,RoutedEventArgs e){ MenuItem obMenuItem = e.OriginalSource as MenuItem; Message@R_137_2419@.Show( String.Format(“{0} just said Hi!”,obMenuItem.Header));}

事件会冒泡到普通的处理程序.然后,您可以使用头文本或更好的DataContext属性进行切换并根据需要进行操作