首页 文章

如何从另一个类引用在MainWindow中创建的类实例

提问于
浏览
1

我对Scope有一个初学者的问题 . 在MainWindow类中,我创建了一个用于数据绑定的ModelView类的实例,以及一个具有我想要显示的Leaves属性的Cabbage类的实例 . 我的问题是如何从updateCabbageLeaves方法中引用myCabbage.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#的新手 . 谢谢你的帮助 .

詹姆士

2 回答

  • 3

    你对这种关系的看法并不完全正确 . 你真正想要做的是在视图模型中创建一个Cabbage模型的实例,传入它,并在那里映射和操作它 .

    注意:您的课程也应该是公开的 . 你必须指定这个 .

    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; }
    }
    

    这是一个更清洁,并不强制在主方法中操纵甘蓝

  • 0

    你可以把卷心菜对象作为争论:

    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);
        }
    

相关问题