Вы глубоко, ужасно неправы, вы не должны приводить View к ViewModel , потому что он всегда будет возвращать false, null или выдает исключение.
В связанном примере, например, в любых типичных проектах, связанных с M-V-VM, классы, связанные с Model, View и ViewModel, находятся в ковариации ...
Итак, M, V, VM слабо связаны, поэтому нет общих корневых классов для преобразования.
- class AbstractViewModel -> ... -> ViewModels * 1015 вашего представления (привязки пользовательского интерфейса, поведение, привязки данных)
- class AbstractView -> ... -> Ваши Просмотры (страницы, экраны и т. Д.);
- class AbstractModel -> ... -> Ваши Модели (алгоритмы, бизнес-уровень и т. Д.)
Эти иерархии, скорее всего, не будут находиться в одном дереве, за исключением базового класса объекта, поскольку это нарушит слабую связь и утратит идею отделения логики представления (презентатор, модель представления) от модели и визуального дизайна (представления, элементы управления)
В большинстве сред DI зависимости внедряются как общедоступные свойства только для чтения, поэтому попробуйте посмотреть (зависит от реализации MVP, MV-VM, MVC), например ((1) точка (2) означает только чтение) свойство (2) в классе с именем (1), некоторые из них могут быть также внутренними, поэтому недоступны:
- ViewModel.View
- ViewModel.Model
- View.ViewModel
- Model.ViewModel
Фактические имена свойств могут отличаться, но логика - нет.
В вашем случае вы, скорее всего, пропустили это свойство:
<% var model= Model.ViewModel as MyViewModel; %>.
или
<% var model= (Model as MyModel).MyViewModel; %>.
или просто
<% var model= MyModel.MyViewModel; %>. (if you are the M-V-VM frameworks developer like me)