Переход с Caliburn Micro на Catel

Я собирался перенести довольно новый проект с Caliburn Micro на Catel. Я хочу поделиться с вами своими мыслями и получить от вас обратную связь.

Начнем со структуры моего приложения:

  • Приложение WPF на основе MVVM
  • Пакет управления пользователями Telerik
  • Использование ServiceStack для получения данных с веб-сервера
  • Использование SimpleInjector для IoC
  • NLog для ведения журнала
  • TCP/IP-соединение с удаленным сервером
  • FW 4.0 с Microsoft.BCL.Async
  • Приложение похоже на Visual Studio (Docking)

Теперь, когда структура почти ясна, я начну с вопросов:

  1. Мои модели заполняются через ServiceStack.OrmLite, поэтому они являются POCO со свойством, а не свойством зависимости, поскольку модели совместно используются на веб-сервере и в части WPF, которую я не хочу наследовать от ModelBase, если мне придется заново создавать объект, который наследуется от базы моделей, когда данные поступают на часть WPF?
  2. Данные, отображаемые в RadGridView, привязаны к свойству модели, насколько я видел здесь , я должен передать ViewModel модель, как я могу связать эти данные с сеткой или представлением в целом?
  3. Я нахожу довольно полезным в CM соглашение, поэтому, если я назову TextBox x:Name=Surname, он ищет свойство Surname, в Catel я должен это сделать? или есть что-то подобное?
  4. В моем приложении я широко использую асинхронность. Может ли это сделать Catel?
  5. Я читал, что я могу заменить поставщика Ioc Catel по умолчанию на SimpleInjector ... кто-нибудь преуспел в этом?

Спасибо

ОБНОВЛЕНИЕ №1

Пояснения к моделям

Для простоты рассмотрим объект типа Person, который будет загружаться из веб-сервиса через сервисный стек.

[Alias("Person")]
public class Person 
{
[Alias("NAME")]
 public string Name {get;set;}

[Alias("SURNAME")]
public string Surname {get;set;}

}

Это будет возвращено как IList и, возможно, загружено в GridView.

Теперь пользователь хочет отредактировать его, поэтому я загружу этого человека в другую модель представления с именем UpdatePersonViewModel (показан во всплывающем окне)

Если я не внедрил его, как вы сделали в своем образце, я не смогу использовать Catel Validation и так далее, верно? так что, может быть, мне нужно создать PersonModel, который принимает параметр Person как конструктор, а затем создает объект, верно?

5. Для SimpleInjector я начал использовать его давным-давно, прочитав этот пост

  1. Если я должен использовать классическую привязку для свойств, для привязки событий я должен использовать команды? что, если у меня есть пользовательский элемент управления, для которого нет команды?

в Caliburn я могу прикрепить сообщение в форме

 cal:Message.Attach="[Event DataLoading] = "[Action Something($eventArgs)"] .

В Catel, как я должен связать это событие??


person advapi    schedule 15.05.2015    source источник
comment
Я лично использую базовый класс VieModel. И это все, что мне действительно нужно. Почему вы используете фреймворк?   -  person hkon    schedule 15.05.2015
comment
Чтобы разделить View / Viewmodel, использование IoC и т. д. Я знаю, что у меня может быть то же самое с классом ViewModel, но есть готовая функция, которую я использую, и мне нравятся только соглашения.   -  person advapi    schedule 15.05.2015
comment
@hkon ViewModelBase — это всего лишь очень маленькая деталь MVVM. С технической точки зрения вы правы, но Catel предоставляет множество удобств для больших приложений (вложенные пользовательские элементы управления, сопоставления между моделью и моделью представления, аудит, диспетчеры команд (команды для всего приложения)). Вам не нужно писать какой-либо код или модульные тесты, чтобы использовать это в своих приложениях при использовании fx вместо собственного VMB.   -  person Geert van Horrik    schedule 16.05.2015


Ответы (1)


  1. Нет, Catel может работать с любой моделью. Есть только некоторые удобства, которые вы получаете бесплатно, если ваша модель реализует IEditableObject, INotifyPropertyChanged, IDataErrorInfo и т. д.
  2. Сетки в основном привязаны к списку объектов, вам не следует создавать отдельную модель представления для каждой строки, чтобы не забывать о производительности.
  3. Caliburn основан на соглашениях, а Catel — нет (для креплений). Вы должны использовать обычные привязки.
  4. Ага, "конечно"
  5. Да, но вы должны спросить себя, почему вы хотите это сделать и хотите ли вы это сделать. Catel готов предложить вам готовые решения, изменяйте их только тогда, когда у вас есть действительно веские причины.

Кстати. вас может заинтересовать Orchestra, это оболочка, которую мы создали на основе Catel для приложений WPF (NET 40 и NET 45), который содержит множество приятных функций, таких как полностью настраиваемые сочетания клавиш, экран-заставка и т. д.)

Ответ на обновление №1

3.1: См. EventToCommand или любое другое поведение и триггеры, поставляемые с Catel. .

  1. Бенчмаркинг — это очень хорошо, но вы должны помнить, сколько вы на самом деле делаете. Вы, вероятно, вводите не более 2/3 vm в секунду, вы не заметите никакой разницы. Но если вы действительно хотите, ознакомьтесь с этой документацией о том, как заменить компоненты по умолчанию.

  2. Вы все еще можете использовать проверку, но вы должны реализовать ее внутри своей модели представления. Это сложно для ваших сеток, поэтому лучше создать оболочку, которая может проверять себя. Таким образом, вы действительно можете создать класс ValidatablePerson, который будет проверять человека и обертывать его свойства (или просто реализует только проверку). Это легко сделать с помощью шаблонов T4.

person Geert van Horrik    schedule 16.05.2015
comment
Привет, Герт, мне приятно читать ваш ответ... что я имею в виду под моделями, так это то, что мне нравится, когда они передаются по сети как объект POCO..., поэтому я не хочу, чтобы они реализовывали IEditable и так далее. на... информирую вас по основному вопросу.. - person advapi; 16.05.2015
comment
Спасибо за ваш ответ, Герт, о проверке. Я читал об AutoMapper, чтобы сгладить мою модель ... реализует ли Catel что-то подобное? - person advapi; 17.05.2015
comment
Нет, вы можете безопасно использовать для этого AutoMapper. - person Geert van Horrik; 17.05.2015