从Caliburn Micro迁移到Catel

本文关键字:Catel 迁移 Micro Caliburn | 更新日期: 2023-09-27 17:49:17

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

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

  • 基于MVVM的WPF应用
  • Telerik Usercontrol Suite
  • 使用ServiceStack从web服务器检索数据
  • SimpleInjector在IoC中的使用
  • NLog用于记录
  • TCP/IP连接到远程服务器
  • FW 4.0 with Microsoft.BCL.Async
  • 应用程序类似于Visual Studio (Docking)

现在结构基本清楚了,我将从我的问题开始:

    我的模型是通过ServiceStack填充的。OrmLite所以他们是POCO与属性,而不是依赖属性,因为模型是共享在web服务器和WPF部分,我不想从ModelBase继承,我应该重新创建对象继承从ModelBase当数据到达WPF部分?
  1. 在RadGridView中显示的数据被绑定到一个模型属性,就我在这里看到的,我必须传递给ViewModel模型我怎么能将这些数据绑定到网格或视图一般?
  2. 我发现CM的约定非常有用,所以如果我命名一个文本框x: name ="姓氏"它寻找一个属性姓,在Catel我该怎么办?或者是否存在类似的东西?
  3. 在我的应用程序中,我大量使用异步可以做到这一点与Catel?
  4. 我读到我可以用SimpleInjector代替Catel的默认Ioc提供商…有人成功过吗?

感谢<标题> UPDATE # 1

模型说明

为简单起见,考虑一个Person类型的对象,它将通过Servicestack 从webservice加载。
[Alias("Person")]
public class Person 
{
[Alias("NAME")]
 public string Name {get;set;}
[Alias("SURNAME")]
public string Surname {get;set;}
}

这将作为一个列表返回,并可能加载到GridView

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

如果我没有像你在样本中所做的那样实现它,我将无法使用Catel验证等等,对吗?也许我需要创建一个PersonModel它以Person作为构造函数参数然后创建对象,对吗?

5。对于SimpleInjector,我在很久以前读过这篇文章后就开始使用它了

  • 如果我必须使用经典绑定属性,事件绑定我使用命令吗?如果我有一个没有命令的用户控件怎么办?
  • 在Caliburn中,我可以在

    形式中附加消息
     cal:Message.Attach="[Event DataLoading] = "[Action Something($eventArgs)"] .
    

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

    从Caliburn Micro迁移到Catel

      不,Catel可以与任何模型一起工作。如果你的模型实现了IEditableObject, INotifyPropertyChanged, IDataErrorInfo等,你就可以免费获得一些便利
    1. 网格大多绑定到一个对象列表,你不应该为每一行创建一个单独的视图模型,以保持性能
    2. Caliburn是基于约定的,而Catel不是(对于绑定)。你应该使用常规的绑定。
    3. 是的,"当然"
    4. 是的,但是你应该问问你自己为什么要这样做,如果你想这样做。只有当你有很好的理由时,才会改变。

    顺便说一句。你可能会对Orchestra感兴趣,它是我们在Catel之上为WPF应用程序(。NET 40和。NET 45)构建的一个shell,它包含了很多不错的功能,比如完全可定制的键盘快捷键、启动屏幕等。

    对更新#1的响应

    3.1:参见EventToCommand或任何其他随Catel附带的行为和触发器。

  • 基准测试是非常好的,但你应该记住你实际做了多少。你可能一秒钟最多注射2/3个vm,你不会注意到任何差异。但是如果你真的想要,可以查看一下如何替换默认组件的文档。

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