Вам не нужен conatiner-объект - посмотрите этот образец из DX-документов:
public class RowTemplateSelector : DataTemplateSelector
{
public DataTemplate EvenRowTemplate { get; set; }
public DataTemplate OddRowTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
RowData row = item as RowData; //<= mind this line of code!!!!
if (row != null)
return row.EvenRow ? EvenRowTemplate : OddRowTemplate;
return base.SelectTemplate(item, container);
}
}
Используя RowData-объект, вы можете получить доступ к соответствующему View-object
DataViewBase view = row.View;
Используя View-объект, вы можете получить доступ к соответствующему Grid-объекту
DataControlBase grid = view.DataControl;
Доступ к DataControl означает, что у вас есть доступ к его item-source
object o = grid.ItemsSource;
Оттуда вопрос каста и подсчета вашего фактического типа ItemsSource.Следующий TemplateSelector возвращает разные шаблоны в зависимости от того, меньше или меньше число элементов, чем десять:
public class RowTemplateSelector : DataTemplateSelector
{
public DataTemplate SmallerThenTenTemplate { get; set; }
public DataTemplate BiggerThenTenTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
RowData row = item as RowData; //<= mind this line of code!!!!
object itemSource = row.View.DataControl.ItemsSource;
IEnumerable<YourModelType> sourceList = (IEnumerable<YourModelType>)itemSource;
if (sourceList.Count() > 10)
return BiggerThenTenTemplate;
else
return SmallerThenTenTemplate;
}
}