C# 如何将ContentControl之外的其他组件绑定到Caliburn Micro中的视图?
因此,在Caliburn Micro中,我一直使用以下方法在另一个视图中组合视图: 将ContentControl放在composing视图中。 在组合ViewModel上创建特性,并将组合ViewModel指定给它 为ContentControl指定一个x:Name属性,该属性与组合ViewModel上的组合ViewModel属性的名称相匹配。 就像这样 视图: Caliburn Micro自动发现,因为它是一个ContentControl,所以它显然不想绑定到ViewModel,而是要绑定到它的关联视图,因此它暗中做了一些事情,将ContentControl的内容属性绑定到MyComposedView而不是MyComposedViewModel 但是,如果我不想使用ContentControl怎么办?比如,也许是我的某个可重用的自定义组件包装了ContentControl?例如:C# 如何将ContentControl之外的其他组件绑定到Caliburn Micro中的视图?,c#,wpf,caliburn.micro,C#,Wpf,Caliburn.micro,因此,在Caliburn Micro中,我一直使用以下方法在另一个视图中组合视图: 将ContentControl放在composing视图中。 在组合ViewModel上创建特性,并将组合ViewModel指定给它 为ContentControl指定一个x:Name属性,该属性与组合ViewModel上的组合ViewModel属性的名称相匹配。 就像这样 视图: Caliburn Micro自动发现,因为它是一个ContentControl,所以它显然不想绑定到ViewModel,而是要绑定到
<UserControl x:Class="MyProject.MyContentWrapper"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid x:Name="PreviewBox" SizeChanged="onSizeChanged">
<Image x:Name="BGImage" Source="{Binding BGImage}"/>
<ContentControl Content="{Binding}"/>
</Grid>
</UserControl>
如果我用MyContentRapper替换ContentControl,CaliburnMicro将不再发挥其提供MyComposedView的魔力,而我最终会得到一个文本块,上面写着MyProject.MyComposedViewModel
如何让CaliburnMicro知道这是一种应该提供视图而不是视图模型的情况?您要做的是为自定义控件添加约定: 去。 搜索AddElementConvention。 在应用程序启动时运行的引导程序中创建一个新方法。添加对ConventionManager.AddElementConvention的调用,类似于对ContentControl的调用。 确保在控件上放置ContentPropertyAttribute并指定content属性。 免责声明:我在手机上,无法验证这一点
class ComposingViewModel : PropertyChangedBase
{
private ComposedViewModel _myComposedViewModel;
public ComposedViewModel MyComposedViewModel
{
get { return _myComposedViewModel; }
set
{
_myComposedViewModel= value;
NotifyOfPropertyChange(() => Page);
}
}
public ComposingViewModel(ComposedViewModel myComposedViewModel)
{
MyComposedViewModel = myComposedViewModel;
}
}
<UserControl x:Class="MyProject.MyContentWrapper"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid x:Name="PreviewBox" SizeChanged="onSizeChanged">
<Image x:Name="BGImage" Source="{Binding BGImage}"/>
<ContentControl Content="{Binding}"/>
</Grid>
</UserControl>