Das Out-Team möchte wiederverwendbare Ansichten erstellen. Zum Beispiel möchten wir das CommonPromptView
(unser eigenes, anpassbares Dialogfeld, in dem wir die Schaltfläche "Abbrechen" ausblenden, die Kopfzeile festlegen, ein bestimmtes Symbol anzeigen können usw.) in verschiedenen Apps wiederverwenden.
Diese Ansicht hat mehrere Elemente auf ihrer Oberfläche: TextBlocks, Buttons. Wir wollen sie stylisch machen.
Nun, was ist der beste Ansatz, um diese Aufgabe zu lösen?
Im ersten Fall kann das Styling auf zwei Arten unterstützt werden:
Die beiden sind meiner Meinung nach nicht sauber.
Wenn eine View jedoch ein UserControl ist, muss jedes Mal, wenn jemand eine neue App erstellt, ein neues Fenster erstellt werden, das ein UserControl enthält und seine Bindungen korrekt auf DPs (vom Style-Typ) setzt. Außerdem, wenn ein UserControl über eine eigene sehr praktische API verfügt (statische Methoden für die am häufigsten verwendeten Operationen), die für den Benutzer des Fensters verloren geht, das das UserControl enthält.
Update
Beispiel für CommonPromptView
, implementiert als Benutzersteuerelement.
Code-behind
XAML
Ich denke in Ihrem Fall müssen Sie in Richtung von DataTemplate
schauen, um den dynamischen Inhalt zu machen. Ich habe ein paar Beispiele dafür gemacht. Die allgemeine Bedeutung dieser Beispiele:
Zwei Schaltflächen, eine für den Benutzer und eine für den Administrator. Wenn Sie
User
wählen, wird der Inhalt dem Benutzer angezeigt, wennAdmin
, dann für den Administrator.
Das ist natürlich nicht das realistischste Beispiel, aber es ist nur eine Möglichkeit, die dynamische Auswahl des Inhalts zu zeigen. Für Sie bestimmen Sie den Zustand des Ersatzinhalts.
Example A
In diesem Beispiel wird das dynamische Ersetzen von DataTemplates
in Abhängigkeit von den Eingabewerten veranschaulicht. Wenn wir in Stilmuster denken, ist es sehr ähnlich der abstrakten Fabrik, wo anstelle von Klassen - DataTemplate
und Factory-Methode ein dynamischer DataTemplate
Selektor ist. Beispiel ist vollständig geeignet für MVVM
pattern. Unten ist ein Beispiel:
MainWindow.xaml
MainView.xaml
Es ist ein DataTemplate
in ResourceDictionary
. Es gibt zwei Vorlagen: UserTemplate und AdminTemplate. Eine für den Benutzer und eine für den Administrator. Im Stil von ContentControl
definiert ContentTemplateSelector und eine Sammlung von Vorlagen, die von der Bedingung installiert werden. In der Eigenschaft Content
für DynamicContentControl wird die Inhaltszeichenfolge wie folgt festgelegt: User
oder Admin
.
MainViewModel.cs
Hier in den Befehlen legen Sie den Inhaltstyp fest.
%Vor% MainModel.cs
DynamicTemplateSelector
Genommen und wenig überarbeitet von CodeProject:
%Vor% Result for User
Result for Admin
Notes about this way
Vorteile:
Nachteile:
Fazit:
Diese Methode eignet sich für völlig unterschiedliche Ansichten. Wenn sich die Darstellungen nicht sehr unterscheiden, sehen Sie ein zweites Beispiel.
Example B
In diesem Beispiel wird ein DataTemplate
verwendet, die Daten werden dem Modell entnommen, standardmäßig werden alle Steuerelemente ausgeblendet ( Visibility.Collapsed
), alle Aktionen in View
werden über DataTriggers
ausgeführt. Beispiel ist vollständig geeignet für MVVM
pattern.
MainWindow.xaml
MainView.xaml
MainViewModel.cs
MainModel.cs
Result for User
Result for Admin
Notes about this way
Vorteile:
Nachteile:
View
eine Menge Steuerelemente und Daten bearbeiten. Fazit:
Diese Methode eignet sich für Views
, die sich nicht sehr unterscheiden und die Anzahl der verschiedenen Werte nicht zu groß ist.
Tags und Links wpf xaml wpf-4.0 wpf-controls