Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ContentControl之外的其他组件绑定到Caliburn Micro中的视图?_C#_Wpf_Caliburn.micro - Fatal编程技术网

C# 如何将ContentControl之外的其他组件绑定到Caliburn Micro中的视图?

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,而是要绑定到

因此,在Caliburn Micro中,我一直使用以下方法在另一个视图中组合视图:

将ContentControl放在composing视图中。 在组合ViewModel上创建特性,并将组合ViewModel指定给它 为ContentControl指定一个x:Name属性,该属性与组合ViewModel上的组合ViewModel属性的名称相匹配。 就像这样

视图:

Caliburn Micro自动发现,因为它是一个ContentControl,所以它显然不想绑定到ViewModel,而是要绑定到它的关联视图,因此它暗中做了一些事情,将ContentControl的内容属性绑定到MyComposedView而不是MyComposedViewModel

但是,如果我不想使用ContentControl怎么办?比如,也许是我的某个可重用的自定义组件包装了ContentControl?例如:

<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>