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

标签 wpf mvvm user-controls caliburn.micro

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

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

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

最佳答案

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

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

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

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

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

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

当您有 ContentControl在与父 View 模型上的 View 模型属性同名的 View 中,然后 Caliburn.Micro 将定位相应 View 模型的 View ,将其注入(inject) ContentControl ,并绑定(bind) View / View 模型。

例如:
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>

关于wpf - Caliburn.Micro 能否很好地与用户控件配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580325/

相关文章:

c# - Wpf 文件浏览器对话框选择快捷方式文件

c# - 标记在 XML 命名空间中不存在

unit-testing - 使用适当的抽象时,我们是否需要对 GUI 进行单元测试?

c# - Asp.net 用户控制更改文本语言

WPF:将画笔恢复为默认/原始

.net - 在 .NET 开发中,WinForms/桌面开发人员与 ASP.NET 开发人员的区别是什么?

c# - WPF 网格大小调整

c# - 基于范围WPF的动画进度条前景颜色

c# - ListView不会删除Xamarin.Forms中的项目。我已将ObservableCollection分配给ListView itemsource。 MVVM

MVVM 用户控件 - 我在哪里声明它以从页面获取数据?