【问题标题】:How can I create a DataTemplate for a collection?如何为集合创建 DataTemplate?
【发布时间】:2010-12-28 20:18:57
【问题描述】:

我希望能够创建一个DataTemplate,以便在将集合传递到控件时使用。

我正在构建一个控件,当传递一个对象或对象集合时,用户控件的视图符合为对象类型定义的模板。

例如,这是我拥有的一个用户控件,它在将对象传递到 .Content 属性时切换视图。

<UserControl x:Class="Russound.Windows.UI.UserControls.MAX.OMS_Main_Screen.OMSContextSwitcher"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:Entities="clr-namespace:Russound.Components.ReturnAuthorization.Entities;assembly=Russound.Components"
             xmlns:Return_Authorization="clr-namespace:Russound.Windows.UI.UserControls.Return_Authorization" 
             xmlns:CallLog="clr-namespace:Russound.Windows.UI.UserControls.CallLog"
             xmlns:Entities1="clr-namespace:Russound.Components.Membership.Entities;assembly=Russound.Components"
             xmlns:Membership="clr-namespace:Russound.Windows.UI.UserControls.Membership"
             xmlns:Entities2="clr-namespace:Russound.Components.Commerce.MAX.Entities;assembly=Russound.Components"
             xmlns:OMS_Main_Screen="clr-namespace:Russound.Windows.UI.UserControls.MAX.OMS_Main_Screen"
             xmlns:Entities3="clr-namespace:Russound.Components.CallLog.Entities;assembly=Russound.Components"
             MinHeight="600" MinWidth="700">

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Russound.Windows;component/UI/RussoundDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>

                <DataTemplate DataType="{x:Type Entities3:Case}" >
                    <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" />
                </DataTemplate>

                <DataTemplate DataType="{x:Type Entities:RAMaster}">
                    <Return_Authorization:RaMasterUi DataContext="{Binding}" />
                </DataTemplate>

                <DataTemplate  DataType="{x:Type Entities1:RussUser}">
                    <Membership:CMCControlWpf DataContext="{Binding}" />
                </DataTemplate >

                <DataTemplate DataType="{x:Type Entities2:MaxCustomer}">
                    <OMS_Main_Screen:MaxCustomerConfigWpf DataContext="{Binding}" />
                </DataTemplate >


        </ResourceDictionary>
    </UserControl.Resources>
</UserControl>

我希望能够做类似的事情:

<DataTemplate DataType="{x:Type IEnumerable<MaxCustomer>}">
    <OMS_Main_Screen:MaxCustomerConfigWpf DataContext="{Binding}" />
</DataTemplate >

但我总是遇到编译器错误,所以我有点不知所措。

【问题讨论】:

    标签: wpf data-binding .net-3.5 collections datatemplate


    【解决方案1】:

    您可以创建一个类型化集合并直接使用该类型而不是 IEnumerable

    public class MyCollection:IEnumerable<MaxCustomer>
    {
       ....
    }
    
     <DataTemplate DataType="{x:Type Entities:MyCollection}">
                <OMS_Main_Screen:MaxCustomerConfigWpf DataContext="{Binding}" />
     </DataTemplate >
    

    【讨论】:

    • +1,你不能做OP想要的原因是因为WPF不允许在接口上模板化。
    • 是的,这就是我一直在倾斜的地方。我只是想知道这里是否有另一种攻击方法。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2016-05-28
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多