1

私はCompositeMVVMアプリケーションに取り組んでおり、グローバルバインディングイベントを発生させようとしています-そうでない場合を除きます!..

CanRunはtrueを返しますが、ボタンはデフォルトで無効になっています!! !! コンポジットガイドに従いましたが、OnLoadMenuが起動していません!!!

私は輪になって回っています(イベントアグリゲーター、DelegateCommands、CompositeCommands)それはうまくいきません。これを見て、私が欠けているものを教えてもらえますか?

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

1 に答える 1

4

CompositeCommandtrue に設定して を作成している場合に PRISM を使用する場合は、状態monitorCommandActivityを認識して設定する必要もありますDelegateCommand.IsActive

その場合CompositeCommand、 は非アクティブな を考慮しないDelegateCommandため、ボタンが無効のままになる可能性があります (たとえば、のコマンド チェーンに他のアクティブな実行可能ファイルがない場合) DelegateCommandCompositeCommands

于 2012-05-25T16:39:54.887 に答える