【问题标题】:WPF binding producing various controlsWPF 绑定产生各种控件
【发布时间】:2011-10-26 19:27:30
【问题描述】:

我是 WPF 的新手,可能会问一些愚蠢的问题。但是。

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

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

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

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

【问题讨论】:

    标签: .net wpf


    【解决方案1】:

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

    因此,您可以为您的菜单创建一堆模板:

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

    对树使用分层的,它们为项目的子项提供内部ItemsSource。对我来说,为菜单树设置多个类似乎是多余的,叶子也可以是 MenuDescriptors,尽管没有任何子节点(就像普通的 MenuItems 一样)。

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 2020-10-14
      • 1970-01-01
      • 2015-06-03
      • 2011-07-26
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多