2

Entity Frameworkでデータにアクセスするために使用しSQL Server、SQLテーブルのデータをで表示する必要がありますWPF DataGrid。私は自分のエンティティのいずれかに対してそれを行う方法を知っています:私はで作成ViewしますDataGrid

<DataGrid ItemsSource="{Binding Rows}" SelectedItem="{Binding Row}" />

と公共の財産としてViewModelObservableCollection<PERSONS>

public class DictionaryViewModel : ViewModelBase
{
    private ObservableCollection<PERSONS> rows;
    public ObservableCollection<PERSONS> Rows
    {
         get
         {
              return rows;
         }
         set
         {
              rows = value;
              RaisePropertyChanged("Rows");
         }
    }

    public DictionaryViewModel()
    {
        Rows = new ObservableCollection<PERSONS>(myDataContext.PERSONS);
    }
}

私の質問は、任意のエンティティに対してどのようにそれを行うかです。エンティティの汎用タイプはありますか?このようなものを書くといいでしょう:

public class DictionaryViewModel : ViewModelBase
{
    private ObservableCollection<GenericType> rows;
    public ObservableCollection<GenericType> Rows
    {
         get
         {
              return rows;
         }
         set
         {
              rows = value;
              RaisePropertyChanged("Rows");
         }
    }

    public DictionaryViewModel(GenericType type)
    {
        Rows = new ObservableCollection<type>(...);
    }
}

ViewModel私は実際に私が持っているエンティティごとに個別に作成したくありません。

ありがとう。

4

3 に答える 3

4

クラスにジェネリックパラメータを単純に導入してみませんか?

public class DictionaryViewModel<T> : ViewModelBase
{
    private ObservableCollection<T> _rows;
    public ObservableCollection<T> Rows
    {
         get
         {
              return _rows;
         }
         set
         {
              _rows = value;
              RaisePropertyChanged("Rows");
         }
    }
}

2つのインスタンス(1つは用Person、もう1つは用Department)を作成し、ゲートウェイロジックを実装して正しいソースをバインドする必要があります。

編集:
異なるタイプの1つのインスタンスを使用したい場合は、忘れてください。共通プロパティを定義するための基本クラスを導入し、この新しいタイプをジェネリック制約として使用しPersonます。Department

于 2013-02-18T08:35:58.550 に答える
2

はい、できます。ジェネリック型の代わりにオブジェクトを使用する必要があります。コードは次のようになります

public class ViewModelBase
{
    // base class code
}

public class DictionaryViewModel : ViewModelBase
{

    public DictionaryViewModel()
    {
        Rows = new ObservableCollection<Object>();
    }

    private ObservableCollection<Object> rows;
    public ObservableCollection<Object> Rows
    {   
        get
        {
            return rows;
        }
        set
        {
            rows = value;
            RaisePropertyChanged("Rows");
        }
    }
}

これで、行は任意のエンティティを保持できます。

于 2013-02-18T08:00:10.140 に答える
0

はい、ジェネリックがありObservableCollection<T>ます。

ObservableCollection<T> Class

public class DictionaryViewModel<T> : ViewModelBase
{
    private ObservableCollection<T> rows;
    public ObservableCollection<T> Rows
    {
         get
         {
              return rows;
         }
         set
         {
              rows = value;
              RaisePropertyChanged("Rows");
         }
    }

    public DictionaryViewModel(IEnumerable<T> collection)
    {
        Rows = new ObservableCollection<T>(collection);
    }
}

利用方法

DictionaryViewModel<Person> model =
                 new DictionaryViewModel<Person>(dataContext.Persons);
于 2013-02-18T07:47:41.540 に答える