【发布时间】:2017-02-06 11:27:49
【问题描述】:
我有模型类和接口:
public interface IEntity
{
int ID { get; set; }
}
public class Entity : IEntity
{
public int ID { get; set; }
}
我有 ViewModel 接口:
public interface IEntityListViewModel
{
RangeObservableCollection<IEntity> Items { get; set; }
IEntity SelectedItem { get; set; }
void LoadItems();
}
我需要一个 ViewModel 基类:
public abstract class EntityListViewModel<T> : IEntityListViewModel where T : IEntity
{
public RangeObservableCollection<T> Items { get; set; }
public T SelectedItem { get; set; }
public EntityListViewModel()
{
Items = new RangeObservableCollection<T>();
}
protected abstract List<T> GetEntities();
public void LoadItems()
{
var lst = GetEntities();
Items.ReplaceRange(lst);
}
}
当然,编译器需要IEntityListViewModel.Items的实现!
我能做到:
public interface IEntityListViewModel<T> where T : IEntity
{
RangeObservableCollection<T> Items { get; set; }
T SelectedItem { get; set; }
void LoadItems();
}
但我还有一门课:
public abstract class UserControlBase : UserControl
{
public IEntityListViewModel VM { get; set; }
public virtual void UserControl_Loaded(object sender, RoutedEventArgs e)
{
VM.LoadItems();
}
}
我需要UserControlBase,因为我的 ViewModel 有很多事件,并且我想在UserControlBase 中订阅它们。
我可以这样做:
public IEntityListViewModel<T> VM { get; set; }
但是我必须有UserControlBase<T>。我不喜欢这样。
如何从IEntityListViewModel 继承EntityListViewModel<T>?还是有其他解决办法?
【问题讨论】:
标签: c# .net generics inheritance