从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部分?
- 在RadGridView中显示的数据被绑定到一个模型属性,就我在这里看到的,我必须传递给ViewModel模型我怎么能将这些数据绑定到网格或视图一般?
- 我发现CM的约定非常有用,所以如果我命名一个文本框x: name ="姓氏"它寻找一个属性姓,在Catel我该怎么办?或者是否存在类似的东西?
- 在我的应用程序中,我大量使用异步可以做到这一点与Catel?
- 我读到我可以用SimpleInjector代替Catel的默认Ioc提供商…有人成功过吗?
模型说明
为简单起见,考虑一个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中我应该如何绑定事件??
- 不,Catel可以与任何模型一起工作。如果你的模型实现了IEditableObject, INotifyPropertyChanged, IDataErrorInfo等,你就可以免费获得一些便利
- 网格大多绑定到一个对象列表,你不应该为每一行创建一个单独的视图模型,以保持性能
- Caliburn是基于约定的,而Catel不是(对于绑定)。你应该使用常规的绑定。
- 是的,"当然"
- 是的,但是你应该问问你自己为什么要这样做,如果你想这样做。只有当你有很好的理由时,才会改变。
顺便说一句。你可能会对Orchestra感兴趣,它是我们在Catel之上为WPF应用程序(。NET 40和。NET 45)构建的一个shell,它包含了很多不错的功能,比如完全可定制的键盘快捷键、启动屏幕等。
对更新#1的响应
3.1:参见EventToCommand或任何其他随Catel附带的行为和触发器。
-
基准测试是非常好的,但你应该记住你实际做了多少。你可能一秒钟最多注射2/3个vm,你不会注意到任何差异。但是如果你真的想要,可以查看一下如何替换默认组件的文档。
-
你仍然可以使用验证,但是你必须在视图模型中实现它。这对于您的网格来说很复杂,因此最好创建一个可以验证自身的包装器。所以你确实可以创建一个ValidatablePerson类来验证这个人并包装它的属性(或者仅仅实现验证)。可以使用T4模板轻松完成。