SimpleMVVM и универсальный ViewModelBase
Недавно я нашел набор инструментов SimpleMVVM и пытаюсь создать небольшой пример программы. Я пытаюсь создать параметр CurrentViewModel следующим образом:
private ViewModelBase<> _CurrentViewModel;
public ViewModelBase<> CurrentViewModel
{
get { return _CurrentViewModel; }
set
{
_CurrentViewModel= value;
NotifyPropertyChanged(m => m.CurrentViewModel);
}
}
Любой объект, на который ссылается CurrentViewModel, расширит класс SimpleMVVM ViewModelBase следующим образом:
public class HomeViewModel : ViewModelBase<HomeViewModel>
{ }
У меня проблема в том, что SimpleMVVM ViewModelBase требует тип T в качестве аргумента, и я не знаю, как создать параметр CurrentViewModel так, чтобы он мог принимать любой ViewModel, расширяющий ViewModelBase.
1 ответ
Одна из проблем, связанных с использованием Generics<T>
Это то, что любой потребитель должен знать тип. Если вы подумываете добавить ICollection к вашей модели, вы должны знать, что это за коллекция, чтобы поддерживать строгую типизацию.
Единственное исключение - если вы определяете класс, который сам по себе является общим, который затем может передать свое свойство типа # дочернему классу. т.е.
CustomCollection<T>
{
ICollection<T> _foo;
}
Чтобы сделать то, что вы пытаетесь сделать, потребуется отдельный общий интерфейс, который включает в себя функциональность, которую вы хотите от CommonViewModel.