Я думаю, вам нужно передать шаблоны данных селектору, когда он инициализируется в представлении XAML. Вот как это сделать.
Ваш селектор будет выглядеть так (в основном, принимая шаблоны данных в качестве свойств в классе):
public class MyDataTemplateSelector : DataTemplateSelector
{
public DataTemplate DataTemplate1 { get; set; }
public DataTemplate DataTemplate2 { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
if ([Condition 1] == true)
return DataTemplate1;
if ([Condition 2] == true)
return DataTemplate2;
return base.SelectTemplateCore(item);
}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return SelectTemplateCore(item);
}
}
Затем, чтобы использовать этот селектор, объявите его так в XAML вашего представления:
<Page.Resources>
<MyDataTemplateSelector x:Key="MySelector">
<MyDataTemplateSelector.DataTemplate1>
<DataTemplate .... />
<MyDataTemplateSelector.DataTemplate1>
<MyDataTemplateSelector.DataTemplate2>
<DataTemplate .... />
<MyDataTemplateSelector.DataTemplate2>
</MyDataTemplateSelector>
</Page.Resources>
вы будете в основном объявлять эти шаблоны данных в коде xaml, инициализирующем ваш селектор.
Редактировать: По той причине, что ваш код не работал: я подозреваю, что это потому, что он не может найти элемент, который вы ищете с FindName и, вероятно, возвращает нулевой шаблон данных обратно в представление списка, используя этот селектор .
Надеюсь, это поможет вам.