2017-04-15 5 views
1

Ich bin gerade dabei, einfache Anwendung mit WPF und C# (als Lernübung) zu erstellen. Ich habe bemerkt, dass ich zwei fast identische Seiten benötige (gleiche Benutzereinstellungen, dieselbe Liste, dieselben Methoden für Buttons usw.). Die Sache, die anders wird, ist Inhalt - unterschiedlicher Text, Kopfzeilen, Bilder angezeigt.
Repetitive Methoden zu vermeiden ist einfach - ich werde nur eine Art von abstrakten Basis-Seite erstellen, die diese beiden Seiten erben werden. Aber wie vermeide ich es, den gesamten XAML-Code zu wiederholen? Gibt es eine Möglichkeit, es zivilisiert zu lösen oder sollte ich es einfach kopieren und einfügen wie ein Höhlenmensch?
Vielen Dank!Wie wiederhole ich XAML?

+1

Das klingt wie eine Vorlage mit dem unterschiedlichen Steuerelement Text, Bilder usw. an Eigenschaften eines Viewmodel gebunden. –

+0

Danke, dass du mich in die richtige Richtung gelenkt hast, Kumpel, ich werde mir das ansehen. Danke vielmals! –

+0

... oder ein UserControl anstelle einer Vorlage; gute Antwort da unten von Benjamin. –

Antwort

4

1. Erstellen Sie Benutzersteuerelemente und wiederverwenden

Sie müssen Ihre Fenster nicht setzen alles direkt in. Erstellen Sie stattdessen ein UserControl und legen Sie Ihre ähnlichen Steuerelemente dort. Sie können dann beispielsweise unterscheiden, indem Sie den DataContext ändern oder DependencyProperty für verschiedene Anwendungsfälle verwenden. Angenommen, Sie benennen Ihr Benutzersteuerelement MyUserControl. Anschließend können Sie es wie folgt in Ihrem Fenster schließen ein:

<local:MyUserControl x:Name="MemberNameCanBeAccessedInCodeBehind" /> 

2. Wiederverwendung Code-behind

Eine Sache, die einen großen Augenöffner für mich in Bezug auf Wiederverwertbarkeit war, war die Tatsache, dass eine XAML-Datei und seine Code-Behind-Datei sind im Grunde zwei Seiten derselben Medaille. Gehen wir zurück zu MyUserControl. In der XAML-Datei haben Sie:

<UserControl x:Class="MyUserControl" ... 

Und in der Code-Behind Sie haben:

public partial class MyUserControl : UserControl 

Die Sache ist die: Sie haben nicht von UserControl zu erben! Wenn Sie einige Code-Behind-Funktionalität wie Schlüssel-Bindungen oder Event-Handler haben, können Sie sie wiederverwenden, indem Sie Ihre eigenen benutzerdefinierten Usercontrol-Klasse erstellen:

public class MyUserControlClass : UserControl 
{ 
    // Everything that you want to reuse! 
} 

Jetzt nur Sie UserControl in XAML ersetzen und Code-Behind mit MyUserControlClass und Sie kann diese Funktionalität verwenden:

<local:MyUserControlClass x:Class="MyUserControl" ... 

public partial class MyUserControl : MyUserControlClass 

Das XAML-Fenster zeigt möglicherweise zuerst einen Fehler, aber wenn Sie es kompilieren, funktioniert.