【问题标题】:Selecting a UserControl from XAML从 XAML 中选择用户控件
【发布时间】:2010-03-25 16:22:19
【问题描述】:

我现在正在解决一个问题,我需要在另一个 UserControl 中嵌入一个 UserControl。但是,我需要在运行时确定要实例化哪个嵌入式 UserControl。

这对我来说意味着必须调用某种形式的数据绑定和/或模板选择机制,但我不确定如何继续使用纯 XAML 方法。

如果我要使用代码来执行此操作,我会在父 UserControl 中定义某种容器控件,然后在代码隐藏中,实现一些逻辑来实例化适当的子 UserControl,然后将其作为内容插入到父 UserControl 中的指定容器。

这可以仅使用 XAML 完成,还是需要某种代码隐藏?

【问题讨论】:

    标签: xaml templates user-controls selection


    【解决方案1】:

    如果子UserControl的选择是基于DataContext的类型,最好的方法是在资源中使用ContentControl和多个DataTemplates:

    <ContentControl Content="{Binding SomeProperty"}>
        <ContentControl.Resources>
            <DataTemplate DataType="{x:Type local:Foo}">
                <local:UserControlForTypeFoo />
            </DataTemplate>
            <DataTemplate DataType="{x:Type local:Bar}">
                <local:UserControlForTypeBar />
            </DataTemplate>
        </ContentControl.Resources>
    </ContentControl>
    

    ContentControl 将根据SomeProperty 的类型选择适当的DataTemplate。这就是它通常在 MVVM 中完成的方式

    【讨论】:

    • 这看起来更接近我正在寻找的东西。谢谢。
    【解决方案2】:

    我假设您是从 WPF 开始的,如果我是对的,那么您在这里需要更多 XAML 中的 ItemsControl 并将 ItemsSource(DataObjects 集合) 设置为它,然后定义 ItemsControl.ItemsTemplate 以提供 DataObject 的适当 DataTemplate。 Rest 完全由数据驱动,您无需担心任何实例化,WPF 将完成所有这些可视化创建。

    【讨论】:

    • 谢谢,我会看看这个。不过,这似乎有点违反直觉......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2016-01-12
    相关资源
    最近更新 更多