я класс модели и интерфейс:Наследование родовое-класс от необщего интерфейса
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
, потому что мои ViewModels есть много событий, и в UserControlBase
я хочу подписаться на них. я мог бы сделать:
public IEntityListViewModel<T> VM { get; set; }
, но тогда я должен иметь UserControlBase<T>
. Мне это не нравится.
Как наследовать EntityListViewModel<T>
от IEntityListViewModel
? Или есть другое решение?
У меня нет класса 'EntityListViewModel'. Что это? –
Это интерфейс IEntityListViewModel, typo :) – jtabuloc