2012-01-30 52 views
2

如果我有一個視圖模型,像這樣:Caliburn.Micro設置VM繼承屏幕時,將覆蓋標題字段中查看

public class ViewModel : IPropertyChangeBase, IViewModel 
{ 
} 

「標題」屬性我在視圖的XAML將其綁定到正常顯示。

如果我有ViewModel從屏幕繼承,而不是標題中顯示的是ViewModel的完整類型名稱,如「MarksProject.ViewModels.ViewModel」。這顯示在窗口的標題上。

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

回答

7

Screen定義了Caliburn.Micro用來自動填充標題的屬性DisplayName。剛剛成立,在這樣的構造:

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

而且你有你的頭銜回來 - 並在此過程保存在一個屬性;)

+0

我經常喜歡將模型對象存儲在ViewModel中,並將其包裝在ViewModel屬性中。 Conducotrs試圖覆蓋它,如果我想將名稱包裝在DisplayName屬性中,這真的很糟糕。我認爲IHaveDisplayName接口應該只有一個getter和setter。 – 2012-07-02 18:56:44

0

它通常是一個壞主意,調用虛擬成員(DisplayName )從@ T045T的答案中的構造函數。這是一個更安全的方式:

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

注意set { }是需要避免Mode=TwoWay綁定錯誤。