I am working on a ListView in WPF. M using TemplateSelector.
XAML code is as
<UserControl Name="asd" x:Class="Quelea.CustomControls.Playlist.Playlist"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:PlayListTemplate="clr-namespace:Quelea.CustomControls.Playlist"
xmlns:lib="clr-namespace:Quelea.CustomControls.Library"
mc:Ignorable="d">
<UserControl.Resources>
<DataTemplate x:Key="BibleVersTemplate">
<Grid HorizontalAlignment="Stretch" removed="Aqua">
<Grid Margin="2,2,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="35" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Stretch">
<Image Source="../../Resources/images/bible.png" Height="30" VerticalAlignment="Stretch" HorizontalAlignment="Left" />
</Grid>
<Grid Grid.Column="1">
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding Name}">
<TextBlock.ToolTip>
<ToolTip>
<StackPanel Orientation="Horizontal">
<Label Visibility="Collapsed" Content="{Binding ResourceId}"></Label>
<TextBlock Text="Book: " FontWeight="Bold" />
<TextBlock Text="{Binding Book}" />
<TextBlock Text="; " />
<TextBlock Text="Chapter: " FontWeight="Bold" />
<TextBlock Text="{Binding Chapter}" />
<TextBlock Text="; " />
<TextBlock Text="Vers: " FontWeight="Bold" />
<TextBlock Text="{Binding Vers}" />
</StackPanel>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</Grid>
</Grid>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ImageTemplate">
<Grid HorizontalAlignment="Stretch" removed="HotPink">
<Grid Margin="2,2,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="35" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Stretch">
<Image Source="{Binding Path}" Height="30" VerticalAlignment="Stretch" HorizontalAlignment="Left" />
</Grid>
<Grid Grid.Column="1">
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding Name}">
<TextBlock.ToolTip>
<ToolTip>
<StackPanel Orientation="Horizontal">
<Label Visibility="Collapsed" Content="{Binding ResourceId}"></Label>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</Grid>
</Grid>
</Grid>
</DataTemplate>
<PlayListTemplate:PlayListTemplateSelector x:Key="myKey"
BibleVersesTemplate ="{StaticResource BibleVersTemplate}"
ImagesTemplate="{StaticResource ImageTemplate}"
/>
</UserControl.Resources>
<Grid ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto">
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Stretch">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<Label FontWeight="Bold">Playlist</Label>
</Grid>
<Grid Grid.Column="1" HorizontalAlignment="Right" Margin="0,0,5,0">
<Button Width="20" Height="20" HorizontalAlignment="Right">
<Button.Content>
<Image Source="../../Resources/images/settings.png"></Image>
</Button.Content>
</Button>
</Grid>
</Grid>
</Grid>
<Grid Name="PlayListUI" Grid.Row="1" Grid.Column="0" Margin="0,0,0,0">
<ListView Name="SchedulesPlayList" AllowDrop="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
DragEnter="SchedulesPlayList_DragEnter" Drop="SchedulesPlayList_Drop" SelectionChanged="SchedulesPlayList_SelectionChanged"
ItemTemplateSelector="{StaticResource myKey}">
</ListView>
</Grid>
</Grid>
</UserControl>
Template Selected that i used for this is
public class PlayListTemplateSelector : DataTemplateSelector
{
public DataTemplate BibleVersesTemplate { get; set; }
public DataTemplate ImagesTemplate { get; set; }
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
if (item == null)
return null;
FrameworkElement frameworkElement = container as FrameworkElement;
if(frameworkElement != null)
{
if (Helpers.DragDropHelper.sourceType == Helpers.DragSourceType.BIBLE)
{
Helpers.DragDropHelper.sourceType = Helpers.DragSourceType.NULL;
Helpers.DragDropHelper.sourceEventArgs = null;
return BibleVersesTemplate;
}
else if (Helpers.DragDropHelper.sourceType == Helpers.DragSourceType.IMAGE)
{
Helpers.DragDropHelper.sourceType = Helpers.DragSourceType.NULL;
Helpers.DragDropHelper.sourceEventArgs = null;
return ImagesTemplate;
}
}
return base.SelectTemplate(item, container);
}
}
The problem is, only one kind of template is active in the ListView at a time.
I want to insert different kind of items in the listView at a time, so that all the type of data templates can be used/active at a time in the list view.
Suppose a listview is having first item as image, second item as Text, Third Item as some other anonymous ClassX object, fourth of type classY object and so on. i.e. The listview is storing different kinds of items at a time.
I have seen, when I am doing this, only one data template type is getting activated at a time for any kind of item.
HOW TO DO THAT? ANY TUTORIAL? OR WORKING CODE? OR HOW TO DO? PLEASE GUIDE!!