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.

Другие вопросы по тегам