C# 传递ViewModel与传递绑定变量的方法
我有一个绑定到ViewModelC# 传递ViewModel与传递绑定变量的方法,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个绑定到ViewModel字符串的组合框 我有一个名为Quality的方法,它在内部访问if语句中SelectedItem的值 public ViewModel vm = new ViewModel(); // MainWindow public MainWindow() { InitializeComponent(); DataContext = vm; // Quality Method Quality(vm); // <--- } //
字符串的组合框
我有一个名为Quality的方法,它在内部访问if
语句中SelectedItem的值
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
}
}
我有两种访问值的方法,一种是通过方法传递ViewModel,另一种是通过传递字符串
我应该使用哪种方式,哪种执行速度更快
XAML
示例1-传递ViewModel
在Quality方法中,我直接从if
语句访问vm.Quality\u SelectedItem
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
}
}
这取决于什么是
//做点什么
- 如果必须处理/交互
-对象,请传递viewmodel
作为参数viewmodel
- 否则,使用字符串以减少依赖性和通用性
- 如果您将viewmodel设置为singleton,那么无论您选择哪种方式都无所谓
字符串
值,则只传递该字符串
值。不要强迫您的方法深入研究对象层次结构和依赖关系以获得该值
如果方法需要修改字符串
属性值,则将对象传递到修改属性的位置
从性能的角度来看,您不会注意到任何更改。通过引用访问对象是一种非常廉价的操作。(除非您要实现数十亿次迭代的循环。)
从设计的角度来看,保持简单会使您的代码更加坚实,并且易于重复使用。除了使用哪种方法完全无关外,“方法构造函数”一词毫无意义。方法没有构造函数。您只需将参数或参数传递给方法调用。谢谢,我将更改标题。请注意,您也可以使用直接访问
vm
成员的非静态方法,如private void Quality(){…}
我忘了提到,我还在其他类的其他静态方法中使用它,并且必须通过viewmodelvm
才能让方法看到它。这两种方法都很好而且有用。在给定的上下文中,第二种方法有一点优势(耦合较少)。至于“哪种性能更快”,请确保。。因为他们很快!如果方法是一个void
,我通常让//做一些事情
更改公共int
或字符串
变量的值。如果方法是字符串
,我可能会让它返回一个值。
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
}
}
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
}
}