如何绑定MAUI MenuFlyoutItem命令?点击菜单无响应排查
基于默认MAUI Windows项目,已集成MAUI Community Toolkit,尝试通过点击MenuFlyoutItem触发Command来打开Popup,但点击菜单项时Command完全没触发,断点也没命中。
问题原因
你的代码存在两个关键问题:
- SettingsProgramCommand的定义错误:你把它写成了事件处理方法(带
sender和EventArgs参数),但XAML中Command绑定需要的是实现ICommand接口的属性,而非普通方法。 - SettingsProjectCommand的访问权限不足:这个Command是私有属性,XAML绑定无法访问私有成员,必须改为公共(public)属性。
另外,XAML中给MenuBarItem设置的BindingContext是多余的,因为它会自动继承父级ContentPage的BindingContext,无需额外指定。
修正方案
1. 修改后台代码(MainPage.xaml.cs)
将两个Command都改为public的ICommand属性:
using CommunityToolkit.Maui.Views; using System.Windows.Input; namespace GsnEdMaui; public partial class MainPage : ContentPage { int count = 0; public MainPage() { InitializeComponent(); this.BindingContext = this; } // 其他原有方法保持不变... public ICommand SettingsProgramCommand => new Command(() => { // 写入SettingsProgram的业务逻辑 }); public ICommand SettingsProjectCommand => new Command(() => { this.ShowPopup(new SettingsProjectView()); }); }
2. 简化XAML(MainPage.xaml)
去掉MenuBarItem上多余的BindingContext设置:
<ContentPage.MenuBarItems> <MenuBarItem Text="Settings"> <MenuFlyoutItem Text="Program" Command="{Binding SettingsProgramCommand}"/> <MenuFlyoutItem Text="Project" Command="{Binding SettingsProjectCommand}"/> </MenuBarItem> </ContentPage.MenuBarItems>
修改完成后,点击菜单项即可正常触发对应Command并打开Popup。
内容的提问来源于stack exchange,提问作者digitig
相关产品推荐
相关产品推荐

