我是一名初级WPF程序员。我试图为我的代码添加一些结构:包括用户控件和MVVM。
在这里进行研究后,我发现人们推荐使用Caliburn.Micro。另一方面,我在这里以及其他地方发现了一些关于Caliburn.Micro与UserControls不兼容的投诉。
因此,我的问题是:Caliburn.Micro是否与User Controls兼容?
我是一名初级WPF程序员。我试图为我的代码添加一些结构:包括用户控件和MVVM。
在这里进行研究后,我发现人们推荐使用Caliburn.Micro。另一方面,我在这里以及其他地方发现了一些关于Caliburn.Micro与UserControls不兼容的投诉。
因此,我的问题是:Caliburn.Micro是否与User Controls兼容?
是的,Caliburn.Micro
可以很好地与用户控件一起使用。它是一个有偏见的框架,但不会迫使您走向特定的开发路径。正如连接问题的答案所建议的那样,如果您有任何特定问题,始终可以使用普通的WPF绑定。
事实上,我不会让这两个链接阻止您,第一个链接描述了将单独属性绑定到单个用户控件的方法,并且该解决方案是有效的。更好的解决方案可能是使用自定义DataTemplate
的ItemsControl
,然后在视图模型上创建包含属性名称和值的DTO集合。
第二个链接说明了如果您创建一个视图(UserControl
)并在XAML中创建视图的实例,并希望将其绑定到视图模型,则称为视图优先,并且必须告诉Caliburn.Micro在哪里绑定视图模型:
<UserControl ...
cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />
因此,从概念上讲,这可以被看作是一个视图模型/视图,而不是具有依赖属性等的UserControl。
事实上,当使用Caliburn.Micro时,您会发现您可能会越来越少地使用进行视图组合。这是因为使用视图模型、视图和视图模型优先方法非常容易创建可重用的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>
MenuViewModel
作为ParentViewModel
的构造函数参数包含在内,以自动适配它们。 - mxmissile