Caliburn.Micro可以很好地使用用户控件吗?

Avi*_*Avi 17 wpf user-controls mvvm caliburn.micro

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

在这里研究,我发现人们推荐Caliburn.Micro.另一方面,我在这里其他地方发现了一些关于Caliburn.Micro在UserControls上玩得不好的投诉.

所以我的问题是:Caliburn.Micro能否很好地使用用户控件?

dev*_*tal 38

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

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

第二个链接是说明如何创建一个view(UserControl)并在XAML中创建一个视图实例,并且你希望将它绑定到一个视图模型,然后首先调用view,你必须告诉Caliburn.Micro在哪里视图模型将绑定到:

<UserControl ...
   cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />
Run Code Online (Sandbox Code Playgroud)

因此,这在概念上可以被视为视图模型/视图,而不是具有依赖属性等的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>
Run Code Online (Sandbox Code Playgroud)

  • 是的,使用Caliburn.Micro,您将不会在具有依赖项属性的用户控件意义上使用用户控件,直接从另一个用户控件/窗口等实例化控件. (2认同)
  • 是的,这是正确的,或者如果您使用窗口管理器并且想要以声明方式控制窗口属性,则可以使用窗口 (2认同)
  • 看看http://msdn.microsoft.com/en-gb/library/system.windows.window.aspx和http://www.mindscapehq.com/blog/index.php/2012/03/13/卡利微部-5-的窗口管理器/ (2认同)