2011-01-06 4 views
8

Ich habe ein einfaches Problem mit der Bindungseigenschaft in der Shell-View-Modellklasse auf Title-Eigenschaft von WPF Window- it's shell.Problem mit der Bindung Titel des WPF-Fensters auf der Eigenschaft in der Shell-Ansicht Modellklasse [Caliburn.Micro]

Meine Schale Blick sieht wie folgt aus:

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

Shell Ansicht Modellklasse:

[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"; 
     } 
    } 

Wenn ich laufen app Titel von Shell-Ansicht (WPF Fenster) ist Namespace.ShellViewModelClass, kein Wert Eigenschaft Titel in der Shell-Ansicht Modellklasse.

Wenn ich einen Bildschirm in der Shell-Ansicht aktiviere, ist Titel Eigenschaft des Fensters Namespace.ViewModelClass.

Wie kann ich dieses Verhalten entfernen? Danke für den Rat.

Antwort

20

Da iScreen mit IHaveDisplayName definiert ist und die Screen-Klasse CM Rahmen verfügt über eine Eigenschaft von Display, müssen Sie gerade diese Eigenschaft in Ihrer ShellViewModel setzen, wie folgt aus:

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

Dies gibt mir eine R # Warnung von 'Virtual Member Call im Konstruktor'. Ich habe es noch nicht gut gemacht. Kann die Klasse auch nicht versiegeln. –

0

Es ist ein wenig schwierig zu sagen, von dem Code, den Sie gegeben haben, aber ich nehme an, dass Sie den DataContext Ihres Fensters einer Instanz von ShellViewModel in Ihrem Code-behind zuweisen. Wann wird das ShellViewModel initialisiert?

Sie müssen INotifyPropertyChanged in Ihrem ViewModel für alle Eigenschaften implementieren, für die Sie einen geänderten Wert sehen möchten. Der Link hier ist zu der MSDN-Dokumentation, aber wenn Sie Google und/oder SO dafür suchen, werden Sie viele Beispiele sehen.

+0

ich nicht INotifyPropertyChanged-Schnittstelle implementieren muss, weil ich Verwenden Sie Caliburn.Micro Framework, und meine Shell-Modellklasse wird von der Screen-Klasse abgeleitet und implementiert diese Schnittstelle. –

+0

Entschuldigung - Ich habe meine Antwort auf Ihre ursprüngliche Setzung basiert, die nur die Standardeinstellung hatte; einstellen; Eigentum. Können Sie Ihre Frage auch mit dem Code aktualisieren, der das ViewModel initialisiert und als DataContext festlegt? –

+0

Hallo, in caliburn musst du DataContext nicht starten. Zum Beispiel wird die Eigenschaft des Namens Wonko im Ansichtsmodell automatisch an die Kontrolle mit dem Namen Wonko in der Ansicht gebunden. –

Verwandte Themen