Caliburn.Micro: Как добавить новую ViewModel( помимо MainViewModel)

663
09 декабря 2016, 08:55

Доброго времени суток.

Я пытаюсь написать приложение , используя паттерн mvvm при участии фреймворка Caliburn.Micro .Моя задача: в MainView.xaml кроме MainViewModel ещё одну вьюмодель привязать к MenuItem ,где Header="Файл". Он описан в отдельном классеFileMenuViewModel. Привязку MenuItem к вьюмодели в xaml я делаю так:

<MenuItem cal:View.Model="{Binding FileMenuViewModel, Mode=TwoWay}" Header="Файл" Height="22" Margin="4,0,0,0">

, но при кликании любых кнопок менюшки из MenuItem "Файл" в форме вылетает Exception , например , такой:

"No target found for method OpenFileWindow."

Как я понимаю Caliburn Micro не может найти из этого свойства cal:View.Model этот дурацкий Target , в которой и указывается ViewModel или любой другой элемент , который привязывается к View.

Вот мой проект:

https://yadi.sk/d/Z9paO0yfuqwWc

Столько гуглил и все равно не нахожу: почему CaliBurn.Micro не может найти Target и как это исправить ?

Прошу помогите(и не нападайте , плиз)))) ) , только пока ещё не предлагайте мне варианты , при которых мне придётся AppBootStrapper унаследовать от класса Bootstrapper , что придётся брать ещё с либы Silverlight или Prism , с чем я пока абсолютно не хочу иметь дело (итак тяжело мне в учёбе).

Answer 1

Оказывается Caliburn.Micro действительно устанавливает общую для всех компонентов формы(юзерконтрола) определённого окна класс вьюмодели , которую указывают и вызывают через конструктор класса AppBootStrapper. Чтобы поменять вьюмодель у юзерконтрола , нужно менять свойство контекста данных по отношению к тому тегу контрола(компонента формы) , где он применяется для вашей новой вьюмодели. Таким образом , чтобы задать новую модель , класс которой определён , нужно написать следующим образом:

<Grid.DataContext>
      <VModels:TextInOutViewModel />
</Grid.DataContext>

, где VModels - псевдоним , указывающий на пространство имён , где вы храните обычно классы , каждый из которых представляет вьюмодель

READ ALSO
Tasks и локальный DataTable

Tasks и локальный DataTable

Есть такой вот метод

361
Магнит в Unity - как уменьшить количество GetComponent?

Магнит в Unity - как уменьшить количество GetComponent?

Делаю в Unity магнит - через PhysicsOverlap находим, ищем rigidbody и притягиваем к себеКод

552
Как улучшить глобальный хук на языке C# в Microsoft Visual Studio?

Как улучшить глобальный хук на языке C# в Microsoft Visual Studio?

В форме у меня есть следующий код

375
Как программно поставить указатель в TextBox?

Как программно поставить указатель в TextBox?

Делаю что-то вроде анкеты, в которой необходимо заполнить все поляКак сделать, чтобы по нажатию кнопки, если не заполнено какое либо поле,...

515