Wpf 复合命令不起作用
我正在开发一个复合MVVM应用程序,并试图让全局绑定事件发生——但事实并非如此 默认情况下,尽管CanRun返回true,但按钮被禁用!!我已经遵循了复合指南,并且onload菜单没有启动 我一直在兜圈子(事件聚合器、DelegateCommands、复合命令),它就是不起作用。谁能看看这个,告诉我我错过了什么Wpf 复合命令不起作用,wpf,composite,delegatecommand,Wpf,Composite,Delegatecommand,我正在开发一个复合MVVM应用程序,并试图让全局绑定事件发生——但事实并非如此 默认情况下,尽管CanRun返回true,但按钮被禁用!!我已经遵循了复合指南,并且onload菜单没有启动 我一直在兜圈子(事件聚合器、DelegateCommands、复合命令),它就是不起作用。谁能看看这个,告诉我我错过了什么 //xmlns:local="clr-namespace:Commands;assembly=MyApp" <Button HorizontalAlignment="Center
//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类。(全局命令类位于应用程序基础结构中,并且不“知道”应用程序模块。我正在尝试从管理模块获取命令,如果命令从应用程序中的任何位置触发,则会显示菜单。