2011-01-06 6 views
8

Mam prosty problem z właściwością powiązania w klasie modelu widoku powłoki na własności Tytuł okna WPF - jest to powłoka.Problem z wiązaniem Tytuł okna WPF dla właściwości w klasie modelu widoku powłoki [Caliburn.Micro]

Moja skorupa widok wyglądać następująco:

<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 klasa widok model:

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

Jeśli uruchomić aplikację Tytuł widzenia okna powłoki (WPF) jest Namespace.ShellViewModelClass, bez wartości Właściwość Tytuł w klasie modelu widoku powłoki.

Jeśli aktywuję jakiś ekran w widoku powłoki, właściwość Tytuł okna to Namespace.ViewModelClass.

Jak mogę usunąć to zachowanie? Dziękuję za poradę.

Odpowiedz

20

Od iScreen jest zdefiniowana IHaveDisplayName i klasa Ekran Ramy CM zawiera właściwość DisplayName, wystarczy ustawić tę właściwość w ShellViewModel, tak:

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

To daje mi ostrzeżenie R # o "Wirtualnym wywołaniu członka w konstruktorze". Nie obyło się jednak dobrze. Nie można też zamknąć klasy. –

0

Z kodu, który podałeś, jest trochę trudniej powiedzieć, ale zakładam, że przypisano DataContext twojego okna do instancji ShellViewModel w twoim kodzie z tyłu. Kiedy zainicjowano moduł ShellViewModel?

Musisz wprowadzić INotifyPropertyChanged w swoim ViewModel dla wszystkich właściwości, dla których chcesz zobaczyć zmienioną wartość. Tutaj znajduje się link do dokumentacji MSDN, ale jeśli wyszukasz w Google i/lub SO, zobaczysz mnóstwo przykładów.

+0

nie musi wdrożyć INotifyPropertyChanged interfejs bo użyj Caliburn.Micro Framework i mojej klasy modelu Shell wywodzi się z klasy Screen i implementuje ten interfejs. –

+0

Przepraszam - oparłem swoją odpowiedź na twoim oryginalnym positingu, który właśnie otrzymał domyślnie; zestaw; własność. Czy możesz również zaktualizować swoje pytanie za pomocą kodu, który inicjuje ViewModel i ustawia go jako DataContext? –

+0

Cześć, w caliburn nie można zainicjować DataContext. Na przykład właściwość nazwy Wonko w widoku modelu jest automatycznie wiązana na sterowanie z widoczną nazwą Wonko. –

Powiązane problemy