Wenn ich versuche, ein Ereignis in meinem Kunden Modul zu veröffentlichen, funktioniert es nicht (die Teilnehmer nicht das Objekt erhalten, zeigt nichts):Wie veröffentliche ich ein Ereignis im Konstruktor meines Moduls?
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;
}
Allerdings, wenn ich diese Arbeit um, so dass ich laden sie einen Blick in die Region, die einen Befehl in dem Viewmodel aufruft, die das Ereignis veröffentlicht, und dann deaktiv ich die Ansicht, dann funktioniert es:
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);
}
Ausblick:
<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">
...
Ansichtsmodell:
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();
}
}
}
Wie kann ich die Veranstaltung im Konstruktor des Moduls einfach veröffentlichen, anstatt diese ungeradee Abhilfe zu tun?