Wpf 通过绑定更改用户控件

Wpf 通过绑定更改用户控件,wpf,binding,user-controls,Wpf,Binding,User Controls,我有两个用户控件 根据ViewModel中的值,我希望每次显示另一个UserControl 它们应该位于包装它们的UserControl中 我该怎么做 这里是包装器: <UserControl> <local:UserControl1></local:UserControl1>// I want it to change by a binding </UserControl> //我想用装订的方法把它改一下 您可以在ViewModel中

我有两个
用户控件

根据ViewModel中的值,我希望每次显示另一个UserControl

它们应该位于包装它们的
UserControl

我该怎么做

这里是包装器:

<UserControl>
    <local:UserControl1></local:UserControl1>// I want it to change by a binding
</UserControl>

//我想用装订的方法把它改一下

您可以在ViewModel中拥有bool属性
BoolProperty
,并基于该值,您可以使用
BooleanToVisibilityConverter切换其他控件的可见性-

<UserControl>
    <UserControl.Resources>
       <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </UserControl.Resources>
    <local:UserControl1 Visibility="{Binding BoolProperty, Converter=
                                {StaticResource BooleanToVisibilityConverter}}"/>
</UserControl>


每当
BoolProperty
的值为
true
时,控件将
可见
,如果
false
折叠

使用数据触发器执行该操作。这是从记忆中提取的,但可能会帮助您:

<ContentControl>
    <ContentControl.Style>
        <Style TargetType="ContentControl">
            <Setter Property="Content">
                <Setter.Value>
                    <local:UserControl1 />
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding BoolProperty}" Value="True">
                    <Setter Property="Content">
                        <Setter.Value>
                            <local:UserControl2 />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>


我想了想,没有办法改变对象本身?你说的
改变对象本身是什么意思?我的意思是我不会持有两个对象,然后一个出现,两个隐藏。我想保留一个对象并更改其类型,可能吗?@HodayaShalom您是否考虑过使用针对特定类类型的数据模板?例如,如果您有一个显示宠物的列表框,并且您想要为猫和狗指定不同的视图/用户控件,那么您可以有一个针对猫的数据模板和一个针对狗的不同的数据模板。下面是一个简单而人为的示例:可能需要向样式中添加TargetType。我用这台Surface RT的屏幕键盘输入了整个答案。这不容易!还有一个问题,这一行的TargetType应该是什么:
?当我执行
UserControl
时,它会给我一个错误。TargetType将是
ContentControl