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您可以在其中定义公共属性,并使用这个新类型作为您的通用约束。