【问题标题】:Caliburn.Micro when setting VM to inherit Screen, overrides title field in ViewCaliburn.Micro 将 VM 设置为继承屏幕时,覆盖视图中的标题字段
【发布时间】:2012-01-30 22:33:29
【问题描述】:

如果我有这样的 ViewModel:

 public class ViewModel : IPropertyChangeBase, IViewModel
 {
 }

我在要正确显示的视图的 xaml 中设置的“标题”属性。

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

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

【问题讨论】:

    标签: c# wpf mvvm caliburn.micro


    【解决方案1】:

    Screen 定义了一个属性 DisplayName,Caliburn.Micro 使用它来自动填充标题。只需在构造函数中这样设置:

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

    您将获得您的头衔 - 并在此过程中保存了一个属性;)

    【讨论】:

    • 我经常喜欢将模型对象存储在 ViewModel 中,并将其字段包装在 ViewModel 属性中。如果我想将名称包装在 DisplayName 属性中,Conducotrs 尝试覆盖它真的很糟糕。我认为 IHaveDisplayName 接口应该只有一个 getter 而没有 setter。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多