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 时,您可能会越来越少地使用UserControl
s 来执行视图合成。这是因为使用视图模型、视图和视图模型优先方法很容易创建可重用的 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