Domanda

Ho un app di Windows WPF in cui sto usando Caliburn.Micro. La principale finestra di visualizzazione / viewmodel è gestita da Caliburn.Micro. Una delle sue pulsanti apre una nuova finestra di dialogo che utilizza un diverso View-ViewModel.

In questa finestra ho un contenitore (casella di riepilogo e alcuni controlli di filtro), che voglio fare in un controllo riutilizzabile in modo che posso includerlo in altre finestre di dialogo. Per fare questo ho estratto dal punto di vista della finestra di dialogo e ViewModel il relativo codice e ha creato una nuova visione e ViewModel. Questo tutti sembra buono.

Il problema è che ora di nuovo nella finestra ho un DockPanel con un grande spazio vuoto in cui ho bisogno del controllo riutilizzabile per andare.

Dalla finestra di dialogo ViewModel OnInitalize () ho potuto creare il ViewModel di controllo riutilizzabile, ma non so come ottenere parere, di in DockPanel della finestra di visualizzazione.

Per creare la finestra di dialogo dalla finestra principale ViewModel io uso WindowManager (). ShowDialog () per visualizzare il ViewModel per la finestra di dialogo e Caliburn.Micro si prende cura di impostare la vista. C'è un modo posso specificare in XAML della finestra di dialogo che voglio incorporare la vista per il controllo riutilizzabili e hanno Caliburn creare la vista appropriata / viewmodel?

O sto andando su di esso nel modo sbagliato?

È stato utile?

Soluzione

Se si dispone di una proprietà del modello di visualizzazione di dialogo che è un altro tipo di vista del modello, e si aggiunge un ContentControl alla finestra vista che prende il nome la stessa di questa proprietà, quindi Caliburn.Micro verrà automaticamente iniettare la vista che corrisponde alla la vostra proprietà tipo di vista del modello nel segnaposto ContentControl, e si legano questo punto di vista il modello tipo per la vista anche automaticamente. È ciò che intendi? Qualcosa di simile:

// 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>

Naturalmente, idealmente si vorrebbe iniettare eventuali dipendenze del modello vista finestra (in questo caso MyReusableControlViewModel) e il lavoro contro le astrazioni all'interno del modello vista finestra di dialogo, piuttosto che tipi concreti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top