Wpf 复合命令不起作用

Wpf 复合命令不起作用,wpf,composite,delegatecommand,Wpf,Composite,Delegatecommand,我正在开发一个复合MVVM应用程序,并试图让全局绑定事件发生——但事实并非如此 默认情况下,尽管CanRun返回true,但按钮被禁用!!我已经遵循了复合指南,并且onload菜单没有启动 我一直在兜圈子(事件聚合器、DelegateCommands、复合命令),它就是不起作用。谁能看看这个,告诉我我错过了什么 //xmlns:local="clr-namespace:Commands;assembly=MyApp" <Button HorizontalAlignment="Center

我正在开发一个复合MVVM应用程序,并试图让全局绑定事件发生——但事实并非如此

默认情况下,尽管CanRun返回true,但按钮被禁用!!我已经遵循了复合指南,并且onload菜单没有启动

我一直在兜圈子(事件聚合器、DelegateCommands、复合命令),它就是不起作用。谁能看看这个,告诉我我错过了什么

//xmlns:local="clr-namespace:Commands;assembly=MyApp"
 <Button HorizontalAlignment="Center" Margin="1,1,1,1" 
                               Grid.Row="2" 
            Command="{x:Static local:AdminGlobalCommands.LoadAdminMenu}"/>


 public static class AdminGlobalCommands // In Common Code Library
    {
        //List All Global Commands Here
        public static CompositeCommand LoadAdminMenu = new CompositeCommand();
    }


 public class AdminModuleViewModel : ViewModelBase, IAdminModuleViewModel // In AdminModule
    {
        protected IRegionManager _regionManager;
        private IUnityContainer _container;

        public AdminModuleViewModel(

            IEventAggregator eventAggregator,
            IBusyService busyService,
            IUnityContainer container,
            IRegionManager regionManager
          )
            : base(eventAggregator, busyService, container)
        {
            // show the progress indicator
            busyService.ShowBusy();
            this._regionManager = regionManager;
            this._container = container;

            //set up the command receivers
            this.AdminShowMenuCommand =  new DelegateCommand<object>(this.OnLoadAdminMenu, this.CanShowAdminMenu);

            //Listen To Events
            AdminGlobalCommands.LoadAdminMenu.RegisterCommand(AdminShowMenuCommand);

            busyService.HideBusy();
        }
        public DelegateCommand<object> AdminShowMenuCommand { get; private set; }

        private bool CanShowAdminMenu(object  obj) 
        { //Rules to Handle the Truth
            return true; 
        }

        public void OnLoadAdminMenu(object obj)
        {
            UIElement viewToOpen = (UIElement)_container.Resolve(typeof(AdminMenuControl)) ;
            _regionManager.AddToRegion("MainRegion", viewToOpen);
            _regionManager.Regions["MainRegion"].Activate(viewToOpen); ;
        }
    }
//xmlns:local=“clr名称空间:Commands;assembly=MyApp”
公共代码库中的公共静态类AdminGlobalCommand//
{
//在此处列出所有全局命令
公共静态CompositeCommand LoadAdminMenu=新建CompositeCommand();
}
公共类AdminModuleViewModel:AdminModule中的ViewModelBase、IAdminModuleViewModel//
{
受保护的IRegionManager\u regionManager;
专用IUnityContainer\u容器;
公共管理模块视图模型(
IEventagegrogator事件聚合器,
IBusyService业务服务,
IUnityContainer容器,
IRegionManager区域管理器
)
:base(事件聚合器、busyService、容器)
{
//显示进度指示器
busyService.ShowBusy();
这个._regionManager=regionManager;
这个._容器=容器;
//设置命令接收器
this.AdminShowMenuCommand=新的DelegateCommand(this.OnLoadAdminMenu,this.canshowmenMenu);
//倾听事件
AdminGlobalCommand.LoadAdminMenu.RegisterCommand(AdminShowMenuCommand);
busyService.HideBusy();
}
public DelegateCommand AdminShowMenuCommand{get;private set;}
私有布尔CanShowAdminMenu(对象对象对象)
{//处理真相的规则
返回true;
}
public void OnLoadAdminMenu(对象对象对象)
{
UIElement viewToOpen=(UIElement)_container.Resolve(typeof(AdminMenuControl));
_regionManager.AddToRegion(“主区域”,viewToOpen);
_regionManager.Regions[“MainRegion”]。激活(viewToOpen);
}
}

使用PRISM时,如果您正在创建
复合命令
监视器命令活动设置为true,则还需要了解并设置
DelegateCommand.IsActive
状态


在此情况下,<>代码> CypTeCuMoMand <代码>将不考虑不活动<代码>委托-代码和< /代码> s,因此,您的按钮可能会停用(例如,当没有其他活动的和可执行的<代码>委托代码> <代码>在<代码> CypTeCuMoMDES < /Cuff>的命令链中时)。如何将其设置为DataContext?另外,您是否真的需要命令的“全局性”,或者您只是试图将此单键对象命令连接到ViewModel中的处理程序?如果是这样的话,我可以发布一个更简单的方法,通过prism resolve设置数据上下文。。。在本例中,我希望命令从此模块运行。e、 g它是复合的,shell不知道AdminModule,所以我不能将它放在主应用程序中,因此Globl Commands类。(全局命令类位于应用程序基础结构中,并且不“知道”应用程序模块。我正在尝试从管理模块获取命令,如果命令从应用程序中的任何位置触发,则会显示菜单。