Можно ли установить шаблон управления моего списка с помощью xaml, когда я нажимаю кнопку?Переключить шаблон управления списком при нажатии кнопки
Сейчас я знаю, как установить свой контент-шаблон, когда у меня есть мой ListViewItem
, но не как изменить шаблон управления, когда что-то вне списка.
Я хочу изменить мой ListItemTemplate
, чтобы использовать RentTemplate
или BuyTemplate
нажав соответствующую кнопку.
<Button x:Name="RentButton" />
<Button x:Name="BuyButton" />
<ListView Name="ItemsList">
<ListView.Resources>
<!-- unselected item template -->
<DataTemplate x:Key="DefaultItemTemplate">
</DataTemplate>
<!-- selected item template -->
<DataTemplate x:Key="SelectedItemTemplate">
</DataTemplate>
<DataTemplate x:Key="RentTemplate">
</DataTemplate>
<DataTemplate x:Key="BuyTemplate">
</DataTemplate>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<!-- set properties for all items -->
<Setter Property="ContentTemplate" Value="{StaticResource DefaultItemTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<!-- change what the selected item looks like -->
<Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Редактировать
Я пытаюсь использовать DataTriggers, чтобы выбрать, какой шаблон использовать, когда я изменить свойство (которое я изменить, когда я нажимаю на мои кнопки). Я не думаю, что эта ситуация идеальна, но я не знаю другого пути.
Проблема в том, что я не могу смешивать свойства триггеров и DataTriggers в одном и том же MultiTrigger.
Сценарий, который я пытаюсь сделать, следующий: Если я нажму BuyButton
, я хочу увидеть BuyTemplate
. То же самое для RentButton
с RentTemplate
. НО, когда я нажимаю третью кнопку OverviewButton
Я хотел бы сделать выбор между двумя шаблонами, в зависимости от того, выбран ли текущий ListBoxItem
или нет.
Или я неправильно использую DataTemplates и DataTriggers, и есть ли лучший способ достичь этого?
<Window.Resources>
<!-- unselected item template -->
<DataTemplate x:Key="DefaultItemTemplate">
</DataTemplate>
<!-- selected item template -->
<DataTemplate x:Key="SelectedItemTemplate">
</DataTemplate>
<DataTemplate x:Key="RentTemplate">
</DataTemplate>
<DataTemplate x:Key="BuyTemplate">
</DataTemplate>
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="false"/>
<Condition Binding="{Binding SelectedType}" Value="Overview" />
</MultiDataTrigger.Conditions>
<Setter Property="ContentTemplate" Value="{StaticResource DefaultItemTemplate}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Binding="{Binding SelectedType}" Value="Overview" />
</MultiDataTrigger.Conditions>
<Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
</MultiDataTrigger>
<DataTrigger Binding="{Binding SelectedType}" Value="Rent">
<Setter Property="ContentTemplate" Value="{StaticResource RentTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedType}" Value="Buy">
<Setter Property="ContentTemplate" Value="{StaticResource BuyTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
Кажется, что вы ищете 'DataTemplateSelector'. См. Например, этот учебник: http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector –
@FlatEric: Я бы опубликовал это как ответ с примером использования. –