代码之家  ›  专栏  ›  技术社区  ›  Sharun

WPF数据模板化ItemsControl

  •  1
  • Sharun  · 技术社区  · 17 年前

    ItemsControl 谁的 ItemsSource 绑定到一个 ObservableCollection<Component> Component

    组成部分 有一个 ObservableCollection<Control> 我想补充一点 项目控制 在我的内心 组成部分 Datatemplate 渲染所有控件。 Control 这是我自己的自定义对象,与wpf控件无关。

    有不同类型的控件,所以我尝试使用 ItemTemplateSelector 为每种类型选择正确的模板。在下面的例子中,为了保持小规模,我只展示了一个模板 "RWString" FindResource MyControlTemplateSelector 最重要的 SelectTemplate 选择模板 从不被调用(使用断点检查)。我的xaml有什么问题吗?

    <ItemsControl.Resources>
        <src:MyControlTemplateSelector x:Key="XSelector" />
        <DataTemplate DataType="{x:Type src:Component}"  >
            <Expander Visibility="{Binding Path=Show}">
                    <ItemsControl ItemsSource="{Binding Path=Contrls}" 
                              ItemTemplateSelector="{StaticResource XSelector}">
                    <ItemsControl.Resources>
                        <DataTemplate x:Key="RWstring" >
                            <TextBlock Text="{Binding Path=Label}"/>
                        </DataTemplate>
                    </ItemsControl.Resources>
                    <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>
            </Expander>
        </DataTemplate>
    </ItemsControl.Resources>
    

    更新: Contrls 不是打字错误,只是我使用了一个愚蠢的命名系统。 控制 是类型为的组件的属性 可观察收集<控制> ItemsTemplateSelector 那是我的名字吗 可观察收集<控制> 包含泛型类型的对象,如 Control<int> Control<string> 控制 显然,您无法创建引用泛型类型的数据模板。

    更新3: 已删除更新2,因为它不相关。我拿到了 换工作 StaticResource DynamicResource . 但我不知道为什么会这样。。。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ray Booysen    17 年前

    我猜这对StaticResource不起作用,因为该资源位于ItemsControl中,在计算StaticResources时,该控件可能在加载时未创建。

    加载时的DynamicResources将在加载时计算为表达式,然后在请求时计算为正确的值。

        2
  •  0
  •   Ray Booysen    17 年前

    在绑定嵌套项控件的行中,路径是否正确?它现在是“控制”,应该是“控制”吗?