Erstellen (erstellen) wiederverwendbare dynamische Ansichten

9

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?

  1. Die Ansicht kann vom Typ Fenster sein.
  2. Die Ansicht kann vom Typ UserControl sein.

Im ersten Fall kann das Styling auf zwei Arten unterstützt werden:

  1. Stile von Elementen haben Referenzen auf DynamicResources.
  2. Stile werden an den Konstruktor einer Ansicht übergeben.

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

%Vor%

XAML

%Vor%

    
EngineerSpock 30.12.2013, 11:59
quelle

1 Antwort

4

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, wenn Admin , 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

%Vor%

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 .

%Vor%

MainViewModel.cs

Hier in den Befehlen legen Sie den Inhaltstyp fest.

%Vor%

MainModel.cs

%Vor%

DynamicTemplateSelector

Genommen und wenig überarbeitet von CodeProject:

%Vor%

Result for User

Result for Admin

Notes about this way

Vorteile:

  • vollständige Unabhängigkeit von verschiedenen View

Nachteile:

  • muss für jede Bedingung eine separate Datenvorlage (View), in manchen Fällen ViewModel, erstellen.

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

%Vor%

MainView.xaml

%Vor%

MainViewModel.cs

%Vor%

MainModel.cs

%Vor%

Result for User

Result for Admin

Notes about this way

Vorteile:

  • nur ein DataTemplate

Nachteile:

  • Wenn sich die Darstellungen sehr unterscheiden, müssen Sie in 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.

  

Beide Beispiele finden Sie unter .

    
Anatoliy Nikolaev 23.01.2014, 10:01
quelle

Tags und Links