我的任何实体的通用 ObservableCollection

And*_*eev 3 c# wpf observablecollection mvvm

我用来Entity Framework访问我的数据,SQL Server并且我需要在WPF DataGrid. 我知道如何为我的任何实体执行此操作:我创建View一个DataGrid:

<DataGrid ItemsSource="{Binding Rows}" SelectedItem="{Binding Row}" />
Run Code Online (Sandbox Code Playgroud)

并ViewModel作为ObservableCollection<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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何对任意实体执行此操作?实体有通用类型吗?写这样的东西会很好:

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>(...);
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的不想ViewModel为我拥有的每个实体创建一个单独的实体。

谢谢。

小智 5

为什么不简单地向您的类引入一个泛型参数呢?

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

您只需创建 2 个实例(一个用于Person,一个用于Department)并实现网关逻辑来绑定正确的源。

编辑:
如果您想使用不同类型的一个实例......忘了它吧!引入一个基类Person,Department您可以在其中定义公共属性,并使用这个新类型作为您的通用约束。