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); ;
}
}
你在哪裏構造AdminModuleViewModel?它如何設置爲一個DataContext? 另外,你是否真的需要該命令的「全局性」,或者你只是試圖將這一個Button objects命令連接到ViewModel中的處理程序?如果是的話,我可以發佈一個更簡單的方法來完成 – 2010-02-25 18:29:27
數據上下文是通過棱鏡設置解決方案...在這個例子中,我希望命令從這個模塊運行。例如它是複合的,並且shell不知道AdminModule,因此我不能將它放在主應用程序中,因此Globl Commands Class。 (全局命令類是在應用程序基礎結構中,並且不能「知道」應用程序模塊。我試圖從admin模塊獲得成果,如果命令從應用程序中的任何位置觸發,菜單將顯示。 – Traci 2010-02-26 04:56:28