Caliburn.Micro 能否很好地与用户控件配合使用?

Posted

技术标签:

【中文标题】Caliburn.Micro 能否很好地与用户控件配合使用?【英文标题】:Does Caliburn.Micro play nicely with user controls? 【发布时间】:2012-03-23 17:34:25 【问题描述】:

我是一名新手 WPF 程序员。我正在尝试向我的代码添加一些结构:用户控件和 MVVM。

在这里研究,我发现people recommend Caliburn.Micro。另一方面,我发现了一些抱怨 here 和 elsewhere 关于 Caliburn.Micro 不能很好地与 UserControls 配合使用。

所以我的问题是:Caliburn.Micro 与用户控件配合得很好吗?

【问题讨论】:

【参考方案1】:

是的,Caliburn.Micro 与用户控件配合得很好。这是一个固执己见的框架,但不会强迫你走上特定的发展道路。正如链接问题的答案所暗示的,如果您有任何特定问题,您始终可以使用普通的旧 WPF 绑定。

事实上,我根本不会让这两个链接阻止您,第一个是描述将单独的属性绑定到单个用户控件的方法,并且该解决方案是有效的。更好的解决方案可能是使用 ItemsControl 和自定义 DataTemplate,然后在他的视图模型上创建包含属性名称和值的 DTO 集合。

第二个链接说明如果您创建一个视图 (UserControl) 并在 XAML 中创建该视图的一个实例,并且您希望将其绑定到一个视图模型,那么首先称为视图,并且您有告诉 Caliburn.Micro 视图模型要绑定到哪里:

<UserControl ...
   cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />

所以,这在概念上可以被认为是一个视图模型/视图,而不是一个具有依赖属性等的 UserControl。

实际上,您会发现,当您使用 Caliburn.Micro 时,您可能会越来越少地使用UserControls 来执行视图合成。这是因为使用视图模型、视图和视图模型优先方法很容易创建可重用的 UI 片段。

当您的视图中有一个ContentControl 与父视图模型上的视图模型属性同名时,Caliburn.Micro 将定位相应视图模型的视图,将其注入ContentControl,并绑定视图/视图模型。

例如:

public class MyParentViewModel : Screen

  public MenuViewModel MenuViewModel  get; set; 

  public DetailsViewModel DetailsViewModel  get; set; 

  public MyParentViewModel()
  
    this.MenuViewModel = new MenuViewModel();
    this.DetailsViewModel = new DetailsViewModel();
  


<Grid> 
  <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" />
    <ColumnDefinition Width=".8*" />
  </Grid.ColumnDefinitions>

  <ContentControl Grid.Column="0" x:Name="MenuViewModel" />
  <ContentControl Grid.Column="1" x:Name="DetailsViewModel" />

</Grid>

【讨论】:

从 caliburn 开始,刚刚看到您非常有帮助的帖子 - ...现在可以扩展一点使用 usercontrols ... afaics 视图将成为 usercontrol 不是吗? thxvm 是的,使用 Caliburn.Micro,您将不会使用具有依赖属性的用户控件意义上的用户控件,也不会直接从另一个用户控件/窗口等实例化控件。 好的...但是您仍然会在用户控件中放置一个网格(在 viewmodel/xaml 中包含所有自定义行为)并通过 Caliburn.Micro 将其动态加载到 ContentControl ? (只是想检查一下我没有遗漏什么)。再次非常感谢。 是的,这是正确的,或者如果您正在使用窗口管理器并希望以声明方式控制窗口属性,则可以使用窗口 看看msdn.microsoft.com/en-gb/library/system.windows.window.aspx和mindscapehq.com/blog/index.php/2012/03/13/…

以上是关于Caliburn.Micro 能否很好地与用户控件配合使用?的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

Caliburn.Micro-如何从继承的ViewModel在WPF视图中显示多个项目:Conductor 。Collection.AllActive

Caliburn.Micro 无法匹配来自不同程序集的 View 和 ViewModel

WPF Caliburn.Micro 和 TabControl 与 UserControls 问题

Caliburn.Micro学习笔记----Actions

使用Caliburn.Micro系列2:Convention