首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Caliburn.Micro能很好地处理用户控件吗?

Caliburn.Micro能很好地处理用户控件吗?
EN

Stack Overflow用户
提问于 2012-03-06 16:39:30
回答 1查看 12.2K关注 0票数 17

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

在这里搜索,我发现people recommend Caliburn.Micro。另一方面,我发现hereelsewhere抱怨Caliburn.Micro和UserControls不能很好地合作。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-06 19:14:20

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

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

第二个链接说明如何创建视图(UserControl)并在XAML中创建视图的实例,并且希望将其绑定到视图模型,这称为视图优先,并且您必须告诉Caliburn.Micro视图模型将绑定到何处:

代码语言:javascript
复制
<UserControl ...
   cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />

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

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

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

例如:

代码语言:javascript
复制
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>
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9580325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档