Frage

Ich habe eine Windows-WPF-Anwendung, in der ich bin mit Caliburn.Micro. Das Hauptfenster Ansicht / Ansichtsmodell wird von Caliburn.Micro behandelt. Eines davon ist Schaltflächen öffnet sich ein neues Dialogfenster auf, die eine andere View-Viewmodel verwendet.

In diesem Dialog habe ich einen Behälter (Listenfeld und einige Filter-Kontrollen), dass ich in eine wiederverwendbare Steuer machen will, so dass ich es in anderen Dialogen enthalten. Diese mich aus der Sicht des Dialogs extrahierte zu tun und den entsprechenden Code ein und erstellt eine neue Ansicht und Ansichtsmodell Ansichtsmodell. Das alles sieht gut aus.

Das Problem ist, dass sie nun wieder im Dialog habe ich eine DockPanel mit einem großen leeren Raum, in dem ich die wieder verwendbare Steuer gehen müssen.

Aus dem Dialog Ansichtsmodell OnInitalize () ich das wieder verwendbare Steueransichtsmodell schaffen könnte, aber ich weiß nicht, wie es die Sicht in die Dialog nach Ansicht des DockPanel zu erhalten.

Um den Dialog aus dem Hauptfenster zu erstellen Viewmodel ich Windowmanager (). Showdialog (), um das Viewmodel für den Dialog anzuzeigen und Caliburn.Micro kümmert sich die Ansicht der Einrichtung. Gibt es eine Weise, die ich in dem Dialog des XAML angeben kann, dass ich will, um die Ansicht für die wieder verwendbaren Steuerelement einbetten und habe Caliburn die entsprechende Ansicht / Ansichtsmodell?

erstellen

Oder werde ich darüber in die falsche Richtung?

War es hilfreich?

Lösung

Wenn Sie eine Eigenschaft auf Ihrem Dialog Ansicht Modell, das eine andere Ansicht Modelltyp ist, und fügen Sie ein Contentcontrol zu Ihrem Dialog Ansicht, die die gleiche wie diese Eigenschaft benannt ist, dann Caliburn.Micro automatisch inject der Ansicht, die entspricht Ihr Eigenschaftsmodelltyp in den Content Platzhalter, und binden diese Ansicht Modelltyp auf die automatisch zu sehen. Ist es das was du meinst? So etwas wie:

// Dialog View Model
private MyReusableControlViewModel myReuseableControl;
public MyReusableControlViewModel MyReuseableControl
{ 
   get { return this.myReuseableControl; }
   set { this.myReuseableControl = value;  NotifyOfPropertyChanged(...); }
}

// Dialog View Model Constructor
public DialogViewModel()
{
  this.MyReuseableControl = new MyReusableControlViewModel();
}

// Dialog View
<DockPanel>
  ...
  <ContentControl x:Name="MyReusableControl" />
</DockPanel>

Natürlich, im Idealfall würden Sie alle Abhängigkeiten des Dialogansicht Modells injizieren wollen (in diesem Fall MyReusableControlViewModel) und Arbeit gegen Abstraktionen in der Dialogansicht Modell, anstatt konkrete Typen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top