1

スコープについて初心者の質問があります。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#にかなり慣れていません。助けてくれてありがとう。

ジェームズ

4

2 に答える 2

3

関係についてのあなたの見方は完全に正しくありません。あなたが本当にやりたいのは、ビューモデル内にキャベツモデル自体のインスタンスを作成し、それを渡し、そこでマッピングして操作することです。

注:クラスも公開する必要があります。これを指定する必要があります。

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

これは少しきれいで、メインの方法でキャベツの操作を強制しません

于 2013-02-09T05:03:04.907 に答える
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);
    }
于 2013-02-09T05:00:40.257 に答える