2011-01-06 10 views
8

Ho un semplice problema con la proprietà di associazione nella classe del modello di visualizzazione shell sulla proprietà Title di WPF Window- it's shell.Problema con il titolo vincolante della finestra WPF sulla proprietà nella classe del modello di visualizzazione shell [Caliburn.Micro]

mio guscio vista simile a questa:

<Window x:Class="Spirit.Views.ShellView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="{Binding Path=Title}" > 
    <Grid> 
     <ContentControl x:Name="ActiveItem" /> 
    </Grid> 
</Window> 

guscio classe vista del modello:

[Export(typeof(IShellViewModel))] 
    public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel 
    { 
     private string _title; 

     public string Title 
     { 
      get { return _title; } 
      set 
      { 
       _title = value; 
       NotifyOfPropertyChange(()=>Title); 
      } 
     } 

     public ShellViewModel() 
     { 
      Title = "Spirit"; 
     } 
    } 

Se corro applicazione Titolo di vista della shell (finestra WPF) è Namespace.ShellViewModelClass, nessun valore di proprietà Titolo nella classe del modello di visualizzazione della shell.

Se attivo uno schermo nella vista shell, la proprietà Title della finestra è Namespace.ViewModelClass.

Come posso rimuovere questo comportamento? Grazie per il consiglio.

risposta

20

Dal iScreen è definita con IHaveDisplayName e classe Screen del quadro CM ha una proprietà di DisplayName, è sufficiente impostare la proprietà nel vostro ShellViewModel, in questo modo:

public ShellViewModel() 
{ 
    base.DisplayName = "Spirit"; 
} 
+0

Questo mi dà un avviso R # di "Chiamata membro virtuale in costruttore". Tuttavia non hai ancora un buon modo per aggirarlo. Non posso nemmeno sigillare la classe. –

0

È un po 'difficile distinguere dal codice che hai fornito, ma suppongo che tu assegni il DataContext della tua Finestra a un'istanza di ShellViewModel nel tuo code-behind. Quando viene inizializzato ShellViewModel?

È necessario implementare INotifyPropertyChanged nel ViewModel per qualsiasi proprietà per cui si desidera visualizzare un valore modificato. Il collegamento qui è alla documentazione MSDN, ma se cerchi Google e/o SO per questo, vedrai un sacco di esempi.

+0

Non devo implementare l'interfaccia INotifyPropertyChanged perché io utilizzare Caliburn.Micro Framework e la mia classe del modello Shell deriva dalla classe Screen e implementa questa interfaccia. –

+0

Mi dispiace - ho basato la mia risposta sul positing originale, che ha avuto il valore predefinito; impostato; proprietà. Potresti anche aggiornare la tua domanda con il codice che inizializza ViewModel e lo imposta come DataContext? –

+0

Ciao, in caliburn non devi avviare DataContext. Ad esempio, la proprietà di nome Wonko in view model è automaticamente associata al controllo con il nome Wonko in vista. –