我有一个ComboBox
绑定到ViewModel string
Quality_SelectedItem
。
我有一个名为Quality的方法,该方法在内部if
语句中访问SelectedItem的值。
我有两种访问值的方法,一种是通过ViewModel方法传递,另一种是通过string
Quality_SelectedItem
传递。
我应该以哪种方式使用它,并且执行速度更快?
<ComboBox x:Name="cboQuality"
ItemsSource="{Binding Quality_Items}"
SelectedItem="{Binding Quality_SelectedItem, Mode=TwoWay}"
HorizontalAlignment="Left"
Margin="0,2,0,0"
VerticalAlignment="Top"
Width="105"
Height="22"/>
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private void OnPropertyChanged(string prop)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(prop));
}
}
// Quality Selected Item
private string _Quality_SelectedItem { get; set; }
public string Quality_SelectedItem
{
get { return _Quality_SelectedItem; }
set
{
if (_Quality_SelectedItem == value)
{
return;
}
_Quality_SelectedItem = value;
OnPropertyChanged("Quality_SelectedItem");
}
}
...
在质量方法中,我直接从vm.Quality_SelectedItem
语句访问if
。
public ViewModel vm = new ViewModel();
// MainWindow
public MainWindow()
{
InitializeComponent();
DataContext = vm;
// Quality Method
Quality(vm); // <---
}
// Quality Method
public static void Quality(ViewModel vm)
{
if (vm.Quality_SelectedItem == "High")
{
// do something
}
else if (vm.Quality_SelectedItem == "Low")
{
// do something
}
}
我通过质量方法传递了vm.Quality_SelectedItem
,并给了它string
名称quality
。
public ViewModel vm = new ViewModel();
// MainWindow
public MainWindow()
{
InitializeComponent();
DataContext = vm;
// Quality Method
Quality(vm.Quality_SelectedItem); // <---
}
// Quality Method
public static void Quality(string quality)
{
if (quality == "High")
{
// do something
}
else if (quality == "Low")
{
// do something
}
}
答案 0 :(得分:1)
作为一般规则,您应该使代码尽可能简单。记住KISS原则。这在SOLID中也能很好地发挥作用(“简单”是实现单一职责和接口隔离的好方法。
避免伸手去拿另一个物体。
如果方法中仅需要一个string
值,则仅传递该string
值。不要强迫您的方法深入研究对象层次结构和依赖关系以获得该值。
如果该方法需要 modify 一个string
属性值,则将该对象传递到修改属性的位置。
从性能的角度来看,您不会注意到任何更改。通过引用访问对象是非常便宜的操作。 (除非您要实现数十亿次迭代的循环。)
从设计的角度来看,使事情保持简单可使您的代码成为SOLID,并轻松地允许重复使用。
答案 1 :(得分:0)
这取决于//do something
。
viewmodel
对象,请通过
viewmodel
作为参数