2011-06-24 19 views
1

不是它真的很重要,但我想遵循最佳實踐。在創建視圖模型時,最好使用屬性獲取器或方法?例如使用MVC或類似模式時屬性Getters vs Get方法?

public class ProductViewModel 
{ 
    private readonly Product _product; 

    public ProductViewModel(Product p) 
    { 
     _product = p; 
    } 

    public string Price 
    { 
     get { return string.Format("${0}" _product.Price.ToString("N2") }; 
    } 
} 

考慮到這是一個簡單的例子,最好使用一種方法嗎?

public string GetPrice() 
{ 
    return string.Format("${0}" _product.Price.ToString("N2"); 
} 

這兩者之間有什麼優點/缺點?

+0

您使用「查看模型」的事實並不使用的是MVVM的意思是,MVVM是一個完全不同的模式MVC。呃......你改變了問題標題,沒關係 – BlackTigerX

回答

0

一個警告與第一種方法是,你必須實現第二個屬性能夠得到的價格,不進行格式化

1

我彎下身子朝財產和功能的路程。視圖模型的要點是以適合在視圖中顯示的方式呈現模型。通常視圖和視圖模型通過綁定彼此交談,通常在XAML中完成。

通過使用方法而不是一個屬性,你使佈線了視圖和視圖模型少交鑰匙。

說你最終需要的是價格在其他地方,保持它在舊代碼,但沒有新的代碼格式格式化。用一種方法,你現在需要另一種方法,或一個財產來獲得價格。與財產,you could just apply a StringFormat to the first binding

<!-- Old code --> 
<TextBlock Text="{Binding Price}" /> 

<!-- New code --> 
<TextBlock Text="{Binding Price, StringFormat=${0:N2}}" /> 
<awesome:MoneyUpDown Value="{Binding Price}" /> 
+0

如果我們推動格式化的視圖,那麼爲什麼有一個ViewModel之間呢?爲什麼不直接綁定到模型產品? – Fixer

+0

因爲模型不應該有inotify的東西,等 – user7116

1

如果使用的是MVVM,機會是你想INotifyPropertyChanged的支持,在這種情況下,性能是要走的路。有許多框架(例如Caliburn.Micro)可幫助您最大限度地減少重複的粗體代碼,如接通通知。

原來的問題是關於MVVM模式。用普通的MVC(沒有數據綁定),答案並不是那麼清晰。就個人而言,當不需要額外的計算或數據訪問時,在獲取簡單數據時,我仍然會在方法上使用屬性。

3

如果你使用MVVM,然後你使用數據綁定。數據綁定綁定到屬性,而不是方法。 (請參閱Binding.Path屬性的文檔 - 該頁面上沒有出現單詞「method」,這是關於屬性的。)

所以沒有比賽。使用屬性,因爲這是綁定系統支持的。

+1

對不起只是爲了澄清,我與MVC的工作,所以沒有數據綁定回事。如果使用MVC,你會繼續使用屬性嗎? – Fixer

+1

這並非真正「澄清」,而是改變了整個問題。在MVVM的上下文之外,這只是一個「屬性與方法」的哲學問題,所以我會遵循.NET的屬性使用指南:http://msdn.microsoft.com/en-us/library/bzwdh01d%28v= VS.71%29.aspx –