我是一个新手WPF程序员。我试图在我的代码中添加一些结构:用户控件和MVVM。
在这里搜索,我发现people recommend Caliburn.Micro。另一方面,我发现here和elsewhere抱怨Caliburn.Micro和UserControls不能很好地合作。
所以我的问题是: Caliburn.Micro能很好地处理用户控件吗?
发布于 2012-03-06 19:14:20
是的,Caliburn.Micro
可以很好地处理用户控件。这是一个固执己见的框架,但不会强迫你走上特定的开发道路。正如链接问题的答案所暗示的那样,如果您有任何特定的问题,您可以始终使用普通的旧WPF绑定。
事实上,我根本不会让这两个链接阻止您,第一个是描述一种将单独的属性绑定到单个用户控件的方法,并且解决方案是有效的。更好的解决方案可能是使用一个带有自定义DataTemplate
的ItemsControl
,然后在他的视图模型上创建一个包含属性名和值的DTO集合。
第二个链接说明如何创建视图(UserControl
)并在XAML中创建视图的实例,并且希望将其绑定到视图模型,这称为视图优先,并且您必须告诉Caliburn.Micro视图模型将绑定到何处:
<UserControl ...
cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />
因此,这在概念上可以被认为是视图模型/视图,而不是具有依赖属性等的UserControl。
实际上,当您使用Caliburn.Micro时,您可能会发现使用越来越少的UserControl
来执行视图组合。这是因为使用视图模型、视图和视图模型优先方法创建可重用的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>
https://stackoverflow.com/questions/9580325
复制相似问题