2015-04-14 13 views
5

Nuovo in Caliburn e WPF MVVM, quindi potrei trascurare qualcosa di piuttosto semplice e non sono riuscito a trovare nulla che cercasse sul web.Il titolo della finestra viene sovrascritto quando si utilizza il conduttore di Caliburn <object> in vista modello

Configurare un semplice progetto wpf con Caliburn.Micro. Imposta il titolo della finestra in ShellView.xaml. Funziona bene. Main MetroWindow visualizza il titolo come previsto.

funziona bene:

[Export(typeof (IShell))] 
public class ShellViewModel : PropertyChangedBased, IShell 
{} 

Ma il cambiamento a:

[Export(typeof (IShell))] 
public class ShellViewModel : Conductor<object> 
{} 

e il titolo della finestra è il nome completo di questo ViewModel. Qualsiasi aiuto sarebbe apprezzato. Grazie.

risposta

8

Si può usare in questo modo:

[Export(typeof (IShell))] 
public class ShellViewModel : Conductor<IScreen> 
{ 
    public ShellViewModel() 
    { 
     DisplayName = "Your window title"; 
    } 
} 

Nel mio archivio è possibile trovare alcune applicazioni in WPF utilizzando Caliburn.Micro, ad esempio:

+0

Grazie per il link e il suggerimento. Ancora lo stesso. Dovrei aver detto che sto usando Caliburn.Micro 2.02. Notato nel bootstrapper che stai usando 1.5.2. –

+0

Potresti mostrare il tuo progetto? Ho preparato un'app campione con la nuova versione e funziona. Hai visto questa [documentazione] (https://caliburnmicro.codeplex.com/wikipage?title=Screens,%20Conductors%20and%20Composizione)? (Devo andare, cercherò di aiutare domani). –

0

Grazie a Wojciech per avermi indicato nella giusta direzione.

Quando ShellViewModel eredita PropertyChangeBase e IShell, l'impostazione Title = "Titolo finestra" in ShellView.xaml funziona. Ma, quando si utilizza Caliburn.Micro 2.0.2 e che eredita da conduttore (conduttore singolo schermo) il titolo della finestra viene sovrascritta con il nome completo del modello vista (nel mio caso):

FBAGOLDEVALUATOR.APP.VIEWMODELS.SHELLVIEWMODEL 

Questo appare come bug in Caliburn.Micro v2.02, a meno che mi manchi qualcosa.

Soluzione temporanea: associare la proprietà Title della finestra in .xaml a una proprietà pubblica nel ViewModel. La linea XAML:

Title="{Binding Path=DisplayTitle, Mode=OneWay}" 

L'immobile in ShellViewModel.cs:

private string _displayTitle; 
    public String DisplayTitle 
    { 
     get 
     { 
      return _displayTitle; 
     } 
     set 
     { 
      if (value.Equals(_displayTitle)) return; 
      _displayTitle = value; 
      NotifyOfPropertyChange(() => DisplayName); 
     } 
    } 

quindi impostarlo nel costruttore ShellViewModel:

DisplayTitle = "FBA Gold Evaluator"; 

che sembra funzionare.

+0

Ho modificato la risposta aggiungendo una piccola correzione per evitare un'eccezione di riferimento null nel setter ;-). Sei sicuro che l'impostazione "DisplayName" non funziona? Hai rimosso il titolo da XAML prima? –

+0

Hai ragione! Rimozione del titolo da XAML e impostazione DisplayName = "Nuovo titolo" nel costruttore ModelView funziona alla grande. Mi è totalmente mancato. Immagino provando ad imparare XAML, WPF, MVVM e Caliburn.Micro allo stesso tempo è una cattiva idea. Scusa, ho saltato la pistola. Come segnare la tua immissione come risposta? Grazie. –

+0

Hai appena controllato il tuo come risposta. Grazie ancora. –