Ich habe eine einfache Datenbankanwendung, in der ein Benutzer Personen hinzufügen oder löschen kann. Darüber hinaus verfügt die Anwendung über eine Schaltfläche "Hinzufügen neuer Schaltfläche zur Anwendung". Diese Anwendung wird unter Verwendung von Prism
Framework erstellt. Es gibt zwei Module:Erstellen von Add-ons für WPF-Anwendungen
RibbonControlModule (enthält drei Tasten -
Add Person
,Delete Person
,Add new button to application
)PersonModule (enthält Logik zum Hinzufügen und Löschen von Personen)
Meine Anforderung besteht darin, zur Laufzeit neue Schaltflächen hinzuzufügen.
Stellen wir uns eine Situation vor. Ich lebe in Washington und bin glücklich mit diesen beiden Tasten (Add Person
und Delete Person
). Aber mein Freund, Bob, der in New Jersey lebt, würde gern den neuen Knopf Edit Button
hinzufügen, ohne die gesamte Anwendung neu zu kompilieren. Das heißt, Bob schreibt DLL, wo er Person bearbeiten kann und klickt dann Add new button to application
in RibbonControlModule
. Danach erscheint EditPerson
Schaltfläche in RibbonControl
und zum Beispiel in ContextMenu
. Vielleicht EditPerson
dll wäre ein anderes Prism-Modul, ich weiß es nicht.
Das heißt, meine Anforderungen sind:
- steckbare Kontrollen
- ist es möglich, eine Steuerung ohne recompliation Anschluss? (Wie Add-ons oder Erweiterungen (Classic Notes for Opera) in Browser (keine Notwendigkeit, einen Browser neu starten verwenden Add-ons))
- andere Programmierer können ihre Add-ons entwickeln, ohne meinen Quellcode mit
- nachdem einmal ein Benutzer eingesteckt ein Steuerelement, dann sollte dieses neue Steuerelement immer in der Anwendung eingesteckt sein.
Ist es möglich, WPF, MVVM und Prism zu verwenden? Ich mag Prism sehr und möchte Prism nicht leugnen, aber wenn "das Ende die Mittel heilt", würde ich gerne andere Technologien verwenden.
Wenn es möglich ist, wie kann ich es dann tun?
Eine andere Alternative ist, dass ein Plugin die Implementierung einer Repräsentation einer Schaltfläche, die von Ihnen in einer Schnittstelle definiert ist, verfügbar macht. Sie werden wissen, wie Sie dies an die Benutzeroberfläche binden können, während Sie die Schnittstelle geschrieben haben. Werfen Sie die Implementierung in ein ContentControl und verwenden Sie eine DataTemplate, um das Steuerelement einzurichten, sei es eine Schaltfläche oder ein Dropdown oder irgendetwas. – Will
@Will könnten Sie einen Link zur Verfügung stellen? – StepUp
Beachten Sie, dass Sie in der Regel keine MEF oder ein anderes Framework dafür benötigen, wenn Sie sie nicht verwenden möchten. Sie definieren nur eine Schnittstelle (IModule), die von Add-In-Entwicklern implementiert wird, und Sie durchsuchen Assemblys nach Implementierungen dieser Schnittstelle, instanziieren und ausführen dann. Natürlich müssen Sie Erweiterungspunkte in der gesamten Anwendung definieren, aber Sie müssen das sowieso mit jedem Framework tun. – Evk