Caliburn.Micro在设置VM以继承Screen时,会覆盖View中的title字段

时间:2012-01-30 22:33:29

标签: c# wpf mvvm caliburn.micro

如果我有这样的ViewModel:

 public class ViewModel : IPropertyChangeBase, IViewModel
 {
 }

我在视图的xaml中设置的“Title”属性,它必须正确显示。

如果我从View继承ViewModel而不是标题中显示的是ViewModel的完整类型名称,例如“MarksProject.ViewModels.ViewModel”。这显示在窗口的标题上。

 //View Title property being overriden.
 public class ViewModel : Screen, IViewModel
 {
 }

2 个答案:

答案 0 :(得分:7)

屏幕定义了Caliburn.Micro用于自动填充标题的属性DisplayName。只需在构造函数中设置如下:

public ViewModel() {
    this.DisplayName = "MyTitle";
}

你将获得你的头衔 - 并在此过程中保存了一个房产;)

答案 1 :(得分:0)

从@ T045T的答案中调用构造函数中的虚拟成员(DisplayName)通常是个坏主意。这是一种更安全的方式:

public class ViewModel : Screen
{
    public override string DisplayName
    {
        get { return "View Title"; }
        set { }
    }
}

请注意,set { }需要避免Mode=TwoWay绑定错误。