2016-06-10 7 views
0

Ich habe Composite-Anwendung mit Symbolleiste und ich möchte meine Module möglich, einige Schaltflächen zur Symbolleiste hinzufügen. Wie ich verstanden habe, sollte ein RegionManager verwendet werden, um diese Möglichkeit zu bieten.Eine richtige MVVM-Stil-Möglichkeit zum Hinzufügen einer Schaltfläche zur Symbolleiste von Prism-Modul

schrieb ich einen Code wie folgt aus:

public class MyModule : IModule 
{ 
    private readonly IUnityContainer _container; 
    public MyModule(IUnityContainer Container) { _container = Container; } 

    public void Initialize() 
    { 
     var regionManager = _container.Resolve<RegionManager>(); 
     regionManager.RegisterViewWithRegion("MainToolbar", 
              () => new Button 
                { 
                 Content = "My Button", 
                 Command = new DelegateCommand(/* */) 
                }); 
    } 
} 

Aber es scheint wie ein Buttons von Code zu schaffen, vor allem innerhalb der Klasse Module ist keine gute Idee, das MVVM Muster nach. Das zweite Problem besteht darin, dass die Schaltfläche erstellt wird, bevor andere Module initialisiert werden. Daher kann ich nicht auf Dienste verweisen, die von anderen Modulen registriert wurden.

Was genau mache ich falsch? Was ist ein geeigneter Weg, um Aktionen von mehreren Modulen in einer Werkzeugleiste zu sammeln?

+0

ein Modell Verwenden Sie die getroffenen Maßnahmen zu kapseln für diese Schaltfläche. Verwenden Sie ein DataTemplate, um die Schaltfläche zu rendern, und platzieren Sie dieses Schaltflächenmodell (zusammen mit allen anderen erforderlichen Schaltflächenmodellen) in einer Auflistung, die an die Symbolleiste gebunden ist, die ein ItemsControl ist. Die Symbolleiste übernimmt jedes Schaltflächenmodell in der Sammlung, sucht nach der Vorlage und rendert die Schaltfläche. Das ist MVVM. * edit * Wenn alle Modelle die gleichen Eigenschaftennamen gemeinsam haben, müssen Sie nur die ToolBar.ItemTemplate verwenden, um eine Schaltfläche an jedes der Modelle zu binden. – Will

Antwort

1

Ihre Idee ist richtig, tauschen Sie einfach die Schaltfläche für eine Ansicht aus, die eine Schaltfläche enthält. Dann mach die Toolbar zu einer Region und injiziere die "button" -Ansicht in die "toolbar" -Region.

Wenn Ihr Modul auf Dienstleistungen ab, die von anderen Modulen kommen, stellen Sie Ihr Modul auf diesen Modulen abhängig, so dass Prisma stellt sicher, dass die Dienste zunächst initialisiert werden:

[ModuleDependency("ServiceModule")] 
public class ModuleA : IModule 
{ 
    ... 
} 

public class ServiceModule : IModule 
{ 
    ... 
}