2015-07-21 3 views
5

Ich mache etwa so:in der Lage, nicht Titel in einer Ansicht Caliburn.Micro Conductor zu ändern MahApps MetroWindow mit

<Controls:MetroWindow x:Class="BS.Expert.Client.App.Views.ShellView" 
    xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    ShowTitleBar="True" 
    Title="My Title"> 

Die Sache ist, dass dies zugleich ein definierte Hauptleiter auf der Haupt Fenster, mit dem ich der Navigation durch andere Fenster zu steuern, so dass ich nicht in der Lage von MetroWindow zu erben, um zumindest versuchen, den Titel in dem Ansichtsmodell ändern:

public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShell 
{ 
    public ShellViewModel() 
    { 
     #region mahApps Theme Loading 

     var theme = ThemeManager.DetectAppStyle(Application.Current); 
     var appTheme = ThemeManager.GetAppTheme(App.Configuration.Theme); 
     ThemeManager.ChangeAppStyle(Application.Current, theme.Item2, appTheme); 

     #endregion 
     //TODO: Changing Title here is not possible ((MetroWindow)this).Title = "No way"; 
     // Tudo bem na seguinte liña 
     LocalizeDictionary.Instance.Culture = new System.Globalization.CultureInfo("pt-BR"); 
     ShowPageOne(); 
    } 

    public void ShowPageOne() 
    { 
     ActivateItem(new PageOneViewModel()); 
    } 
} 

Wie soll ich den Titel ändern?

Antwort

2

Wenn Sie das MVVM-Muster verwenden, sollten Sie niemals versuchen, im Ansichtsmodell so etwas direkt auf die Ansicht zu setzen. Verwenden Sie stattdessen die Datenbindung, um dies zu erreichen.

So würden Sie eine Eigenschaft auf Ihrem ShellViewModel mit so etwas wie:

public string MyTitle 
{ 
    get { return _myTitle; } 
    set 
    { 
     _myTitle = value; 
     //Insert your property change code here (not sure of the caliburn micro version) 
    } 
} 

und in Ihrem Fenster XAML wäre es so etwas wie:

<Controls:MetroWindow 
    Title="{Binding MyTitle}" 
    xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
    ... 
    > 
+1

von MetroWindow Vererben und Einstellung, die Eigenschaft Titel isn Was willst du machen? Selbst wenn Sie die Vererbung geändert haben, können Sie den Titel der Ansicht auf diese Weise nicht vom Ansichtsmodell ändern. Das ShellView und ShellViewModel wären nur zwei verschiedene Instanzen eines MetroWindow. Wenn Sie den Titel implementieren möchten, implementieren Sie, was ich beschrieben habe, und legen Sie die MyTitle -Eigenschaft im Ansichtsmodell auf den gewünschten Wert. – TylerReid

Verwandte Themen