WPF: возможно ли создать несколько шаблонов ListView.View и динамически выбирать их во время выполнения? - PullRequest
2 голосов
/ 12 ноября 2009

Я хочу иметь ListView элемент управления, который может быть заполнен одним из нескольких различных типов объектов (не смешанный, всегда только один тип). Я хотел бы динамически настраивать столбцы в соответствии с типом объекта, который в данный момент находится в списке.

Я знаю, что мог бы сделать это программно ( Добавление столбцов программно к списку в WPF? ), но мне было интересно, смогу ли я определить различные описания столбцов (GridView s) в XAML как ресурсы, а затем выбрать тот, который мне нужен во время выполнения при изменении типа объекта?

Разъяснение Я использую ListView элемент управления, который отображает детали в столбцах. Столбцы определены так:

<ListView x:Name="TheList">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Columns" Width="80"/>
            <GridViewColumn Header="Added" Width="80"/>
            <GridViewColumn Header="Automatically" Width="100"/>
        </GridView>
    </ListView.View>
</ListView>

У меня вопрос: могу ли я определить количество секций ListView.View и переключаться между ними в зависимости от типа объекта в списке? Список будет содержать только один тип объекта за один раз. Мне просто нужно отобразить другой набор атрибутов.

Ответы, которые я получил до сих пор, похоже, предполагают, что у меня есть простой список, который содержит смесь объектов. Это не относится к делу. Я ищу что-то вроде этого:

Name        Address      Town
-----------------------------------------
Liz         Buck House   London
Angie       Block House  Berlin

и затем переключиться на что-то совершенно другое:

Town       Population
------------------------------
London     123456
Swansea    65432

Возможно, я делаю это слишком сложным ....

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

Сначала определите шаблон данных

<DataTemplate x:Key="MyListTemplate">
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
        <TextBlock FontSize="14" Foreground="Black" Name="tbNombre" Padding="5">
            <TextBlock.Text>
                <Binding Path="Nombre"></Binding>
            </TextBlock.Text>
        </TextBlock>
    </StackPanel>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Active}"
                            Value="False">
            <Setter TargetName="tbNombre" Property="Foreground" Value="Silver" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

После этого динамически изменить шаблон данных:

Dim template As DataTemplate = Application.Current.Resources("MyListTemplate")
MyList.ItemTemplate = template
1 голос
/ 12 ноября 2009

Если вы выбираете шаблон на основе типа объекта, то вы можете просто установить свойство DataType шаблона для этого объекта. Затем WPF выберет шаблон, соответствующий типу элемента.

<DataTemplate DataType="{x:Type l:MyType}"> ...

Если вы хотите выбрать шаблон на основе некоторого свойства в типе, возможно, лучше использовать DataTemplateSelector.

См. блог Беа Штольниц для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...