并非真的很重要,但我想遵循最佳做法。创建视图模型时,最好使用属性getter或方法吗? e.g
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 :(得分:3)
如果您正在使用MVVM,那么您正在使用数据绑定。数据绑定绑定到属性,而不是方法。 (请参阅Binding.Path属性的文档 - 该页面上没有一个单词“method”出现。这都与属性有关。)
所以没有比赛。使用属性,因为这是绑定系统支持的。
答案 1 :(得分: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}" />
答案 2 :(得分:1)
如果您正在使用MVVM,则可能需要INotifyPropertyChanged支持,在这种情况下,属性是可行的方法。有许多框架(例如Caliburn.Micro)可以帮助您最小化重复的crud代码,例如连接通知。
最初的问题是关于MVVM模式。使用普通的MVC(没有数据绑定),答案并不明确。就个人而言,当不需要额外的计算或数据访问时,在获取简单数据时,我仍会使用属性而不是方法。
答案 3 :(得分:0)
第一种方法的一个警告是,您必须实现第二个属性才能在不格式化的情况下获得价格