从 Caliburn Micro 迁移到 Catel

Migrate from Caliburn Micro to Catel

我正在评估将一个全新的项目从 Caliburn Micro 迁移到 Catel。 我想和你分享我的想法并得到你的反馈

让我们从我的应用程序结构开始:

现在结构几乎已经清楚了,我将从我的问题开始:

  1. 我的模型是通过 ServiceStack.OrmLite 填充的,所以它们是 属性 的 POCO 而不是依赖性 属性-like ,因为模型是在网络服务器和 WPF 部分共享的,我不我想从 ModelBase 继承,当数据到达 WPF 部分时,我是否必须重新创建从 ModelBase 继承的对象?
  2. RadGridView 中显示的数据绑定到模型 属性,据我所知 here,我必须将模型传递给 ViewModel 我如何绑定这些数据数据到网格或一般视图?
  3. 我发现在 CM the Convention 中非常有用,所以如果我将 TextBox 命名为 x:Name="Surname",它会查找 属性 Surname,在 Catel 中我应该这样做吗?或者是否存在类似的东西?
  4. 在我的应用程序中,我大量使用了异步,Catel 可以做到这一点吗?
  5. 我读到我可以用 SimpleInjector 替换 Catel 的默认 Ioc 提供程序...有人成功了吗?

谢谢

更新#1

模型说明

为简单起见,考虑一个类型为 Person 的对象,它将通过 Servicestack 从 Web 服务加载

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

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

}

这将作为 IList 返回,并可能加载到 GridView 中

现在用户想要编辑它,所以我将把这个人加载到另一个名为 UpdatePersonViewModel 的视图模型中(显示在弹出窗口中)

如果我没有像您在示例中那样实施它,我将无法使用 Catel 验证等,对吧?所以也许我必须创建一个将 Person 作为 Constructor 参数的 PersonModel,然后创建对象,对吗?

5.For SimpleInjector 我很久以前看过 this post

之后就开始使用它了
  1. 如果我必须对属性使用经典绑定,我是否必须对事件绑定使用命令?如果我有一个没有命令的用户控件怎么办?

在 Caliburn 中,我可以在表单中附加一条消息

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

在Catel中我应该如何绑定那个事件??

  1. 不,Catel 可以使用任何模型。如果您建模实现 IEditableObject、INotifyPropertyChanged、IDataErrorInfo 等,您将免费获得一些便利
  2. 网格主要绑定到对象列表,您不应为每一行创建单独的视图模型以牢记性能
  3. Caliburn 是基于约定的,Catel 不是(对于绑定)。您应该使用常规绑定。
  4. 是的,"of course"
  5. 是的,但你应该问问自己为什么要这样做,是否要这样做。 Catel 为您开箱即用,只有在您有真正充分的理由时才会更改。

顺便说一句。您可能对 Orchestra 感兴趣,它是我们在 Catel 之上为 WPF 应用程序(NET 40 和 NET 45)构建的 shell,它包含许多不错的功能,例如完全可自定义的键盘快捷键、启动画面等)

对更新 #1 的回应

3.1:参见 EventToCommand 或 Catel 附带的许多其他行为和触发器。

  1. 基准测试非常好,但您应该牢记您实际做了多少。您可能最多每秒注入 2 / 3 个 vm,您不会注意到任何差异。但如果你真的想要,请查看 this documentation on how to replace the default components.

  2. 您仍然可以使用验证,但必须在您的视图模型中实现它。这对您的网格来说很复杂,因此最好创建一个可以自我验证的包装器。所以你确实可以创建一个 ValidatablePerson class 来验证这个人并包装它的属性(或者只实现验证)。可以使用 T4 模板轻松完成。