Window 在视图模型中使用 Caliburn 的导体时标题被覆盖<object>

Window title is overwritten when using Caliburn's conductor<object> in view model

Caliburn 和 WPF MVVM 的新手,所以我可能忽略了一些非常简单的东西,而且我在网上搜索时找不到任何东西。

使用 Caliburn.Micro 设置一个简单的 wpf 项目。在 ShellView.xaml 中设置 window 标题。工作良好。 Main MetroWindow 按预期显示标题。

工作正常:

[Export(typeof (IShell))]
public class ShellViewModel : PropertyChangedBased, IShell
{}

但改为:

[Export(typeof (IShell))]
public class ShellViewModel : Conductor<object>
{}

和 Window title 是此 ViewModel 的完全限定名称。任何帮助,将不胜感激。谢谢

你可以这样使用它:

[Export(typeof (IShell))]
public class ShellViewModel : Conductor<IScreen>
{
    public ShellViewModel()
    {
        DisplayName = "Your window title";
    }
}

在我的存储库中,您可以找到一些使用 Caliburn.Micro 的 WPF 应用程序,例如:

感谢 Wojciech 为我指明了正确的方向。

当 ShellViewModel 继承 PropertyChangeBase 和 IShell 时,在 ShellView.xaml 中设置 Title = "Window Title" 有效。但是,当使用 Caliburn.Micro 2.0.2 并从 Conductor(单屏导体)继承时,window 标题被视图模型的 fully-qualified 名称覆盖(在我的例子中):

FBAGOLDEVALUATOR.APP.VIEWMODELS.SHELLVIEWMODEL

这看起来像是 Caliburn.Micro v2.02 中的错误,除非我遗漏了什么。

解决方法:将 .xaml 中 window 的标题 属性 绑定到 ViewModel 中的 public 属性。 .xaml 行:

Title="{Binding Path=DisplayTitle, Mode=OneWay}" 

ShellViewModel.cs中的属性:

    private string _displayTitle;
    public String DisplayTitle
    {
        get
        {
            return _displayTitle;
        }
        set
        {
            if (value.Equals(_displayTitle)) return;
            _displayTitle = value;
            NotifyOfPropertyChange(() => DisplayName);
        }
    }

然后在ShellViewModel构造函数中设置:

DisplayTitle = "FBA Gold Evaluator";

这似乎有效。