C# 传递ViewModel与传递绑定变量的方法

C# 传递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); // <--- } //

我有一个绑定到ViewModel
字符串的
组合框

我有一个名为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,那么无论您选择哪种方式都无所谓

一般来说,您应该使代码尽可能简单。记住接吻原则。这同样适用于SOLID(“simple”是实现单一责任和接口隔离的好方法)

避免触及一个物体以获取另一个物体

如果在方法中只需要
字符串
值,则只传递该
字符串
值。不要强迫您的方法深入研究对象层次结构和依赖关系以获得该值

如果方法需要修改
字符串
属性值,则将对象传递到修改属性的位置

从性能的角度来看,您不会注意到任何更改。通过引用访问对象是一种非常廉价的操作。(除非您要实现数十亿次迭代的循环。)


从设计的角度来看,保持简单会使您的代码更加坚实,并且易于重复使用。

除了使用哪种方法完全无关外,“方法构造函数”一词毫无意义。方法没有构造函数。您只需将参数或参数传递给方法调用。谢谢,我将更改标题。请注意,您也可以使用直接访问
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
    }
}