Составные команды не работают
Я работаю над составным приложением MVVM и пытаюсь вызвать события Global Binding - за исключением того, что это НЕ!..
кнопки отключены по умолчанию, хотя CanRun возвращает true!!!! Я следовал Composite Guide, и OnLoadMenu не запускается!!!
Я ходил кругами (Event Aggregators, DelegateCommands, Composite Commands). Это просто не работает. Может кто-нибудь, пожалуйста, посмотрите на это и скажите мне, что я скучаю??
//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); ;
}
}
1 ответ
При использовании PRISM, если вы создаете CompositeCommand
с monitorCommandActivity
установить в true, вы также должны знать и установить DelegateCommand.IsActive
государство.
В таком случае CompositeCommand
не будет считать неактивным DelegateCommand
s и в результате ваша кнопка может остаться отключенной (например, когда нет других активных и исполняемых DelegateCommand
находится в CompositeCommands
командная цепочка).