2017-05-31 22 views
-1

比方說,我有一個角色模型空的屬性,下游的MVC/MVVM

Person 
{ 
    firstName //Required 
    lastName //Required 
    jobTitle //Optional 
} 

在我的數據庫,我有一個條目(「約翰福音」,「史密斯」,「」)

當我檢索模型,我將Person.jobTitle設置爲NULL。

現在我要呈現在視圖中此條這樣

First Name: John 
Last Name: Smith 
Job Title: Unknown 

在MVVM管道,其中應該從空到未知這種轉變進行?

應該是:

1)向下傳播到視圖,其中潛在的另一個程序員需要知道要做空校驗所有的方式?

2)在創建視圖模型時進行轉換,其中視圖模型沿着jobTitleDisplayValue的行具有屬性。

3)視圖模型中應該有兩個屬性,沿着doJobTitleExist和jobTitle的行。這樣另一位程序員會知道jobTitle可以爲空。

4)模型中的屬性應該不是NULL嗎?

5)...

+0

您是否嘗試過解決方案?它有用嗎?你需要更多的幫助嗎? –

回答

1

井你最好只使用數據的註釋來處理這個,而不是產生額外的屬性這個具體的例子。見你如何能更改爲空值顯示文本鏈接的文章:

https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.nulldisplaytext(v=vs.110).aspx

但是這個具體的例子,我覺得我得到你所要求的,它會是這些問題一個置身其中的答案從開發到開發有很大不同。就我個人而言,我是在將數據加載到視圖模型中時轉換數據的粉絲,因爲這基本上是它的全部目的(imo)來爲視圖建模。然而,它會強制你編寫邏輯,以便在將數據打包並解包到模型中進行更新時,數據綁定變得更加繁瑣。我喜歡這樣做的控制。我相信在這裏有30萬名聲望的人很可能會告訴我,我完全被誤導了。

+1

約定..但我沒有必要的300K ;-)看起來像視圖模型是爲了*放開視圖* ...做一些事情,如獲取本地化照顧,並使控制不知道數據工件像空值。第二個選項爲 – Clay

1

讓我們recape的MVVM架構的目的:

  • 查看是如何顯示數據
  • 視圖模型是你把業務邏輯信息(通過模型),不知道任何東西查看

因此,null是從視圖模型來看事項的事情:它帶來的一個重要信息哪些是真正的,有效的JobTitlenull

查看可以代表JobTitle只是因爲它想:作爲UnknownNot askedNot available ......但業務邏輯將保持不變:一個nullJobTitle

澄清這一點,至少有2種選擇:

1)使用TargetNullValue property of the Binding 在這種情況下,你會寫:

Text="{Binding JobTitle, TargetNullValue=Unknown}" 

2)使用Converter,並在Convert方法寫:

return value ?? "Unknown"; 

我會使用第一個選項,它更簡單。

+1

,是否會返回工作? 「不知道」;'不夠sufice? – Flater

+0

@Flater很好,我會編輯我的答案 –