我是新手 WPF 程序员。我正在尝试在我的代码中添加一些结构:用户控件和 MVVM。
在这里研究,我发现people recommend Caliburn.Micro .另一方面,我发现了一些投诉 here和 elsewhere关于 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/