C# 如何引用在主窗口中从另一个类创建的类实例

C# 如何引用在主窗口中从另一个类创建的类实例,c#,mvvm,scope,C#,Mvvm,Scope,我有一个关于范围的初学者问题。在MainWindow类中,我创建了一个用于数据绑定的ModelView类的实例,以及一个具有我想要显示的Leaves属性的Colla类的实例。我的问题是如何引用updateCabbageLeaves方法中的mycolla.Leaves namespace TestScope { public partial class MainWindow : Window { public MainWindow() { InitializeCo

我有一个关于范围的初学者问题。在MainWindow类中,我创建了一个用于数据绑定的ModelView类的实例,以及一个具有我想要显示的Leaves属性的Colla类的实例。我的问题是如何引用updateCabbageLeaves方法中的mycolla.Leaves

namespace TestScope
{

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        ModelView myModelView = new ModelView();
        Cabbage myCabbage = new Cabbage();
        myCabbage.Leaves = 99;
        myModelView.updateCabbageLeaves();
    }
}

class ModelView
{
    public int CabbageLeaves { get; set; }

    public void updateCabbageLeaves()
    {
        //CabbageLeaves = myCabbage.Leaves;
    }
}

class Cabbage
{
    public int Leaves { get; set; }
}

}
我想这不是建立MVVM的方法。我的理由是:对于MVVM,我需要一个模型类和一个模型视图类。应用程序在MainWindow类中启动,因此我在那里创建了模型和模型视图类的实例

我对C#还相当陌生。谢谢你的帮助


James

您可以将coball对象作为参数传递:

public void updateCabbageLeaves(Cabbage myCabbage)
    {
        this.CabbageLeaves = myCabbage.Leaves;
    }

 public MainWindow()
    {
        InitializeComponent();

        ModelView myModelView = new ModelView();
        Cabbage myCabbage = new Cabbage();
        myCabbage.Leaves = 99;
        myModelView.updateCabbageLeaves(myCabbage);
    }

你对这段关系的看法不太正确。您真正想要做的是在视图模型中创建一个模型本身的实例,将其传入,并在那里映射和操作它

注意:你的课程也应该是公开的。您必须指定此选项

namespace TestScope
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ModelView myModelView = new ModelView();
            Cabbage myCabbage = new Cabbage();
            myCabbage.Leaves = 99;
            myModelView.updateCabbageLeaves(myCabbage);
        }
    }

    public class ModelView
    {
        public Cabbage Cabbage { get; set; }

        public void updateCabbageLeaves(Cabbage myCabbage)
        {
            Cabbage = myCabbage.Leaves;
        }
    }

    public class Cabbage
    {
         public int Leaves { get; set; }
    }
}
不过,老实说,我对你的主要方法中的卷心菜操作不太感兴趣。相反,您可以在构造函数中传入所需的叶子数量,并允许视图模型自行处理

大体上

var myModelView = new ModelView(99);
在您的视图模型中

public class ModelView
{
    public ModelView(int numberOfLeaves)
    {
        Cabbage = new Cabbage(){ Leaves = numberOfLeaves }
    }

    public Cabbage Cabbage { get; set; }
}

这是一个更简洁的方法,并且不会强制在主方法中操纵卷心菜

谢谢,您关于传递对象和创建本地实例的建议非常有用。关于下半部分,你是对的-我的代码看起来不是那样的-我只是想创建一个最简单的示例来说明我的问题!:)很乐意帮忙:)。我只是想提供最好的款式。祝你们班好运!