WPF绑定产生各种控件

时间:2011-08-14 14:38:20

标签: .net wpf

我是WPF的新手,也许会问一些愚蠢的问题。然而。

我有一个自定义类(WidgetDescriptor)派生类(MenuDescriptor,LabelDescriptor,ButtonDescriptor,SelectDescriptor)的树。派生类提供特定于类型的属性(SelectDescriptor描述下拉列表并具有属性Items,而ButtonDescriptor具有属性Text和Image)。

WidgetDescriptor有一个属性Children,它是WidgetDescriptor实例的可观察集合。

因此,应用程序主菜单是MenuDescriptor实例的树,其中ButtonDescriptor实例为叶子。工具栏可能包含SelectDescriptor(下拉框)等

我想知道是否可以将WPF控件映射到具有绑定的描述符类型? 我希望WPF检查WidgetDescriptor派生类类型并创建特定控件?当然,在这些层次结构中。

1 个答案:

答案 0 :(得分:1)

有一些内置功能,每个DataTemplate都有一个DataType,如果设置为您的对象类型并且DataTemplate放在Resources中1}}没有键的字典如果在数据源中遇到该类型的对象,它将自动被使用。

对于您的菜单,您可以创建一组模板:

<Menu ItemsSource="{Binding RootList}">
    <Menu.Resources>
        <HierarchicalDataTemplate DataType="{x:Type obj:MenuDescriptor}"
                ItemsSource="{Binding Children}">
            <!-- ... -->
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type obj:ButtonDescriptor}">
            <!-- ... -->
        </DataTemplate>
        <!-- ... -->
    </Menu.Resources>
</Menu>

对树木使用hierarhical,它们为项目的子项提供内部ItemsSource。虽然对于菜单树有多个类似乎是多余的,但是叶子也可以是MenuDescriptors,尽管没有任何子代(正常MenuItems的情况)。