2010-02-25 82 views
1

我工作的一個綜合應用MVVM並試圖獲得全局綁定事件發生 - 除了它是不是..複合命令不工作

按鈕默認是禁用的雖然CanRun返回true! !我遵循複合指南和OnLoadMenu不發射!

我一直在繞圈(事件聚合器,委託命令,複合命令)它只是沒有工作。可以任何請看看這個,並告訴我我失蹤?

//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); ; 
     } 
    } 
+0

你在哪裏構造AdminModuleViewModel?它如何設置爲一個DataContext? 另外,你是否真的需要該命令的「全局性」,或者你只是試圖將這一個Button objects命令連接到ViewModel中的處理程序?如果是的話,我可以發佈一個更簡單的方法來完成 – 2010-02-25 18:29:27

+0

數據上下文是通過棱鏡設置解決方案...在這個例子中,我希望命令從這個模塊運行。例如它是複合的,並且shell不知道AdminModule,因此我不能將它放在主應用程序中,因此Globl Commands Class。 (全局命令類是在應用程序基礎結構中,並且不能「知道」應用程序模塊。我試圖從admin模塊獲得成果,如果命令從應用程序中的任何位置觸發,菜單將顯示。 – Traci 2010-02-26 04:56:28

回答

3

當使用PRISM,如果你正在創建一個CompositeCommandmonitorCommandActivity設置爲true,您還需要了解並設置DelegateCommand.IsActive狀態。

在這種情況下CompositeCommand不會考慮不活躍DelegateCommand S和結果(如果沒有其他活動和可執行DelegateCommandCompositeCommands的命令鏈爲例)按鈕可能會留下殘疾。