Как я могу создать DataTemplate для коллекции? - PullRequest
0 голосов
/ 21 декабря 2009

Я хотел бы иметь возможность создать 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 >

но я всегда получаю ошибку компилятора, так что я в некоторой степени растерялся.

1 Ответ

3 голосов
/ 21 декабря 2009

Вы можете создать типизированную коллекцию и использовать этот тип вместо IEnumerable напрямую

public class MyCollection:IEnumerable<MaxCustomer>
{
   ....
}

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