从Caliburn Micro迁移到Catel

时间:2015-05-15 09:30:38

标签: c# mvvm catel

我正在评估将一个非常新的项目从Caliburn Micro迁移到Catel .. 我想与您分享我的想法,并从您那里获得反馈

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

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

现在几乎可以清楚我的问题所在的结构:

  1. 我的模型是通过ServiceStack.OrmLite填充的,因此它们具有属性POCO而不是依赖属性,因为模型在Web服务器和WPF部分共享,我不想从ModelBase继承,当数据到达WPF部分时,我是否应该重新创建从modelbase继承的对象?
  2. RadGridView中显示的数据绑定到Model属性,据我所知here,我已经传递给ViewModel Model如何将这些数据绑定到一般的网格或视图?
  3. 我觉得在CM中很有用,所以如果我命名一个TextBox x:Name =" Surname"它寻找一个属性Surname,在Catel我该怎么办?或存在类似的东西吗?
  4. 在我的应用程序中,我大量使用async可以用Catel做到这一点吗?
  5. 我已经读过,我可以用SimpleInjector替换Catel的默认Ioc提供程序......任何人都已经成功了吗?
  6. 由于

    更新#1

    关于模型的说明

    考虑到Person类型的对象,它将通过Servicestack

    从webservice加载
    [Alias("Person")]
    public class Person 
    {
    [Alias("NAME")]
     public string Name {get;set;}
    
    [Alias("SURNAME")]
    public string Surname {get;set;}
    
    }
    

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

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

    如果我没有像你在样本中那样实现它,我就无法使用Catel验证等等吗?所以也许我可以创建一个PersonModel,它接受Person作为Constructor参数,然后创建对象,这是对的吗?

    5.对于SimpleInjector,我在阅读this帖后很久以前就开始使用它了

    1. 如果我使用经典绑定属性,对于事件绑定我是否可以使用命令?如果我有一个没有命令的用户控件怎么办?
    2. 在Caliburn

      我可以在表格中附上一条消息

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

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

1 个答案:

答案 0 :(得分:1)

  1. 不,Catel可以使用任何型号。如果模型实现了IEditableObject,INotifyPropertyChanged,IDataErrorInfo等,那么你可以免费获得一些便利。
  2. 网格主要绑定到对象列表,您不应该为每一行创建单独的视图模型以记住性能
  3. Caliburn是基于惯例的,Catel不是(用于绑定)。你应该使用常规绑定。
  4. 是的,"当然"
  5. 是的,但你应该问问自己为什么要这样做,如果你想这样做。 Catel为您开箱即用,只有在您有充分理由的情况下才能改变。
  6. 顺便说一句。您可能对Orchestra感兴趣,它是我们在Catel for 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 类来验证此人并包装它的属性(或仅仅实现验证)。可以使用T4模板轻松完成。