21.1.6版本中如何条件启用或禁用Navigation Menu菜单项
你传入函数未触发的核心原因是:菜单项的禁用状态属性Enabled为布尔类型,不直接接收函数委托,需要传入布尔值,或者在MVVM场景下绑定实现了属性变更通知的布尔属性。
直接代码控制方案(适用于WinForms、WebForms等非MVVM场景)
在需要变更菜单状态的业务节点(如用户登录完成、权限变更、页面加载时),直接修改目标菜单项的Enabled属性即可:
// 示例:权限校验后调整「数据导出」菜单项状态 void UpdateMenuAuthStatus() { // 按需替换为你自己的菜单项定位逻辑 NavBarItem exportItem = navBarControl.Groups["系统管理"].Items["数据导出"]; // 传入布尔值,权限符合则启用,不符合则禁用 exportItem.Enabled = CurrentUser.HasExportPermission; }
MVVM绑定方案(适用于WPF、Blazor、DevExtreme等MVVM架构场景)
如果用MVVM模式渲染菜单,需要给ViewModel的对应控制属性实现INotifyPropertyChanged接口,再绑定到菜单项的Enabled属性即可实现动态更新:
ViewModel 示例代码
public class MainViewModel : INotifyPropertyChanged { // 控制菜单状态的属性,需实现变更通知 private bool _enableExportMenu; public bool EnableExportMenu { get => _enableExportMenu; set { _enableExportMenu = value; OnPropertyChanged(nameof(EnableExportMenu)); } } // 权限变更时更新属性值,前端会自动同步状态 public void RefreshPermission() { EnableExportMenu = PermissionService.CheckPermission("data:export"); } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
前端绑定示例(WPF)
<dxb:NavBarControl> <dxb:NavBarGroup Header="系统管理"> <dxb:NavBarItem Content="数据导出" Enabled="{Binding EnableExportMenu}" Command="{Binding ExportCommand}"/> </dxb:NavBarGroup> </dxb:NavBarControl>
注意事项
- 不要直接将函数赋值给
Enabled属性,需要主动调用函数拿到布尔返回值后再赋值给该属性 - 绑定场景下如果属性变更后状态没有同步,优先检查属性是否实现了
INotifyPropertyChanged通知
内容的提问来源于stack exchange,提问作者Ajtony Varga
相关产品推荐
相关产品推荐

