DataTemplate для DataType - как переопределить этот DataTemplate в определенном списке - PullRequest
3 голосов
/ 02 ноября 2010

Я создал несколько шаблонов данных для некоторых типов данных в моем любимом проекте. Эти шаблоны данных действительно крутые, так как они работают как по волшебству, волшебным образом преобразуя внешний вид экземпляров типов данных, когда и где бы они ни отображались в пользовательском интерфейсе. Теперь я хочу изменить DataTemplate для этих типов данных в одном конкретном ListBox. Означает ли это, что я должен прекратить полагаться на то, что WPF автоматически применяет шаблон данных к типам данных и назначать x: Key для DataTemplates, а затем применять Template / ItemTemplate в пользовательском интерфейсе с использованием этого ключа?

ListBox содержит элементы различных типов данных (все они получены из общего базового класса) и, как сейчас, все волшебным образом работает без указания TemplateSelector, так как правильный тип выбирается фактическим типом данных элемента в listBox , Если бы я использовал x: Key для применения DataTemplates, нужно ли мне писать TemplateSelector?

Я новичок в этом и только экспериментирую с DataTemplates. Один момент, я думаю, вау, как круто! А потом я хочу другой шаблон данных для того же типа данных в другом окне списка, и я не могу этого сделать :-) Помогите, пожалуйста?

1 Ответ

3 голосов
/ 02 ноября 2010

Вы можете указать ItemTemplate специально для вашего ListBox:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- your template here -->
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Или, в качестве альтернативы, если вы уже определили свой DataTemplate в ResourceDictionary где-то:

<DataTemplate x:Key="MyTemplate">
      <!-- your template here -->
</DataTemplate>

Затем вы можете ссылаться на него на ListBox, используя:

<ListBox ItemTemplate="{StaticResource MyTemplate}" />

Вам не нужно писать селектор шаблонов для работы любого из этих подходов


Пример в ответ на комментарии

В приведенном ниже примере показано определение значения по умолчанию DataTemplate для типа данных (в данном случае String) для окна, а затем переопределение его в списке.:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate DataType="{x:Type sys:String}">
            <Rectangle Height="10" Width="10" Margin="3" Fill="Red" />
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListBox>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Rectangle Height="10" Width="10" Margin="3" Fill="Blue" />
                </DataTemplate>
            </ListBox.ItemTemplate>

            <sys:String>One</sys:String>
            <sys:String>Two</sys:String>
            <sys:String>Three</sys:String>
        </ListBox>
    </Grid>
</Window>

Создает следующий интерфейс:

Example Display

...