인덱스를 기반으로 선택할 템플릿을 결정하는 데 도움이되는 일종의 데이터 템플릿 선택기를 구현할 수 있습니다. 재사용 가능한 추상 TemplateSelector
클래스를 작성하여 시작할 수 있습니다. Implementing Windows Phone 7 DataTemplateSelector and CustomDataTemplateSelector에 설명 된 많은 아이디어를 사용했지만 대신 인덱스를 기반으로 템플릿을 선택할 수 있도록 구현이 수정되었습니다.
public abstract class TemplateSelector : ContentControl {
public abstract DataTemplate SelectTemplate(object item, int index, int totalCount, DependencyObject container);
protected override void OnContentChanged(object oldContent, object newContent) {
base.OnContentChanged(oldContent, newContent);
var parent = GetParentByType<LongListSelector>(this);
var index = parent.ItemsSource.IndexOf(newContent);
var totalCount = parent.ItemsSource.Count;
ContentTemplate = SelectTemplate(newContent, index, totalCount, this);
}
private static T GetParentByType<T>(DependencyObject element) where T : FrameworkElement {
T result = null;
DependencyObject parent = VisualTreeHelper.GetParent(element);
while (parent != null) {
result = parent as T;
if (result != null) {
return result;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}
}
일단 클래스를 만들면 고유 한 데이터 템플릿 선택기 논리를 추가 할 수 있습니다. 귀하의 경우, XAML
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="first">
<TextBlock Text="{Binding Name}" Foreground="Yellow" />
</DataTemplate>
<DataTemplate x:Key="default">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
<DataTemplate x:Key="last">
<TextBlock Text="{Binding Name}" Foreground="Red" />
</DataTemplate>
<DataTemplate x:Key="SelectingTemplate">
<local:MyTemplateSelector Content="{Binding}"
First="{StaticResource first}"
Default="{StaticResource default}"
Last="{StaticResource last}"
HorizontalContentAlignment="Stretch" />
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
<phone:LongListSelector
ItemTemplate="{StaticResource SelectingTemplate}"
ItemsSource="{Binding Data}" />
에게 [ListHeader] 사용하지 어떤 이유 (http://msdn.microsoft.com/en-us/을 마지막으로이
그리고 같은 수 library/windowsphone/develop/microsoft.phone.controls.longlistselector.listheader (v = 1010) .aspx) 및 [ListFooter] (http://msdn.microsoft.com/en-us/library/windowsphone/develop/) microsoft.phone.controls.longlistselector.listfooter (v = 1010) .aspx)? –