顧客モジュールでイベントを発行しようとしても機能しません (サブスクライバーはオブジェクトを受信せず、何も表示しません):
public class CustomersRegister : IModule
{
private static IRegionManager regionManager;
private static IRegion region;
private static CustomersMainView view;
private static CustomerAllView allview;
private static CustomerEdit editView;
public CustomersRegister(IRegionManager manager)
{
regionManager = manager;
}
public void Initialize()
{
StackPanel sp = LoadNavigation();
sp.PublishEvent(PublishEventNames.AddCustomerMenu);
}
public static StackPanel LoadNavigation()
{
StackPanel sp = new StackPanel();
sp.Margin = new Thickness { Left = 10.0, Top = 5.0, Right = 10.0 };
sp.Children.Add(new CustomerMainMenu());
return sp;
}
ただし、この回避策を実行して、イベントを発行するビューモデルのコマンドを呼び出す領域にビューをロードし、ビューを非アクティブにすると、機能します。
public class CustomersRegister : IModule
{
private static IRegionManager regionManager;
private static IRegion region;
private static CustomersMainView view;
private static CustomerAllView allview;
private static CustomerEdit editView;
public CustomersRegister(IRegionManager manager)
{
regionManager = manager;
}
public void Initialize()
{
region = regionManager.Regions[RegionNames.DockManagerContainer];
view = new CustomersMainView();
view.DataContext = new ViewModels.CustomersMainViewModel();
region.Add(view);
region.Activate(view);
}
意見:
<UserControl x:Class="CustomersModul.Views.CustomersMainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ncal="http://infragistics.com/ncal"
xmlns:Commands="clr-namespace:CRMInfrastructure.Commands;assembly=CRMInfrastructure"
ncal:XamDockManagerSettings.IsContentPaneInDocumentHost="True"
Commands:AvarioCommandBehavior.TheCommandToRun="{Binding LoadNavigation}"
Commands:AvarioCommandBehavior.RoutedEventName="Loaded"
Commands:AvarioCommandBehavior.CommandParameter="loading">
...
ビューモデル:
using System.Windows.Input;
using CRMInfrastructure;
using CRMInfrastructure.Commands;
using CRMInfrastructure.Helpers;
namespace CustomersModul.ViewModels
{
public class CustomersMainViewModel : ViewModelBase
{
public ICommand LoadNavigation { get; set; }
public CustomersMainViewModel()
{
LoadNavigation = new DelegateCommand<object>(load);
}
void load(object o)
{
CustomersNavigation.LoadNavigation().PublishEvent(PublishEventNames.AddCustomerMenu);
CustomersRegister.DeactivateView();
}
}
}
この奇妙な回避策を実行する代わりに、モジュールのコンストラクターでイベントを発行するにはどうすればよいですか?