无法使用MahApps MetroWindow在Caliburn.Micro Conductor View中更改标题

Mor*_*rty 6 caliburn.micro mahapps.metro

我这样做:

<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">
Run Code Online (Sandbox Code Playgroud)

问题是,这是同时在主窗口上定义的主导体,我通过其他窗口控制导航,因此我无法从MetroWindow继承至少尝试更改ViewModel中的标题:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何更改标题?

Tyl*_*eid 3

使用 MVVM 模式时,您永远不应该尝试像这样直接在视图模型中设置视图上的任何内容。相反,使用数据绑定来完成此操作。

所以你的 ShellViewModel 上会有一个类似于以下内容的属性:

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

在你的窗口 xaml 中,它会是这样的:

<Controls:MetroWindow
    Title="{Binding MyTitle}"
    xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    ...
    >
Run Code Online (Sandbox Code Playgroud)

  • 从 MetroWindow 继承并设置 Title 属性不是您想要做的。即使您确实更改了继承,它也不允许您以这种方式更改视图模型中视图的标题。ShellView 和 ShellViewModel 只是 MetroWindow 的 2 个不同实例。如果您想设置标题,请实现我所描述的内容,只需将视图模型中的 MyTitle 属性设置为您想要的值即可。 (2认同)