1

前に、DataGrid の行を編集したいときは、DataGtid の行にカーソルを置き、コード ビハインド フォーム (xxx.xaml.cs) のメソッドにそのようなコードを記述しました。

int k = XXXDataGrid.SelectedIndex;

その後、DataGrid の行からデータを取得できます。ここで、WPF の MVVM パターンを使用しようとしましたが、すべての CRUD 操作をモデルに記述する必要があることを読みました。わかった。「DataGrid.SelectedIndex」を取得しようとしましたが、コードビハインド ファイルにハンドラーを作成しないとできません。

MVVMの「モデル」にある他のクラスから「DataGrid.SelectedIndex」とDataGridの行のデータを取得する方法を知りたいです。

値型がスタックに格納されるのはいつですか? 私は C# の本をたくさん読んできましたが、値と参照型について読むときはいつも、「値型がスタックに格納されるのはいつですか?」という疑問が頭に浮かびます。原因プログラマは、クラスから値の型を初期化できません。

4

1 に答える 1

1

ViewModel には、入力されたモデル オブジェクトであるプロパティがあります。ここでそれらを割り当てて、ビューがデータを表示できるようにします。

    public ParentModel 
    {
        get { return parentModel; }
        private set
        {
            if (parentModel != value)
            {
                parentModel = value;
                RaisePropertyChanged("ParentModel");
            }
        }
    }


    public int SelectedItemIndex
    {
        get { return selectedItemIndex; }
        set
        {
            if (selectedItemIndex != value)
            {
                selectedItemIndex = value;
                RaisePropertyChanged("SelectedItemIndex");
            }
        }
    }

View には、DataGrid、ComboBox など、データを表示するためのオブジェクトが含まれます。ItemTemplates を使用してデータの表示方法をカスタマイズできますが、重要なbindのはコントロールに対するデータです。これにより、ViewModel のみから View へ (OneWay)、View から ViewModel へ (OneWayToSource)、またはその両方 (TwoWay) のいずれかの方向モードでデータを流すことができます。したがって、ユーザーが選択したインデックスを変更すると、以下の TwoWay に設定されているため、データは ViewModel に戻ります。ここでの ItemsSource は OneWay として設定されているため、ViewModel のみがビューのそれを変更できます。

    <DataGrid ItemsSource="{Binding Path=ParentModel.Items, Mode=OneWay}"
              SelectedIndex="{Binding Path=SelectedItemIndex, Mode=TwoWay}" />

ViewModel が BusinessLogic と対話する必要がある場合は、データを渡すだけです。別の ViewModel が情報を必要とする場合は、フレームワークで利用可能な概念を使用する必要があります。EventAggregator (Prism)、お互いの知識がないため、データを渡します。


MVVM のコア コンセプトは、このようなモデルと WPF コントロールのプロパティのバインディングです。パワーとデザインを最大限に活用するには、もっと読みたいと思うと思います。StackOverflow には非常に役立つ質問/回答がいくつかあります。MSDN にはいくつかの優れたチュートリアルがあります。

于 2013-08-22T12:24:25.713 に答える