Моя текущая проблема в том, что у меня есть два шаблона, которые нужно выбрать с помощью селектора шаблонов. Я определил две таблицы данных. Каждый из них содержит разные stackPanel, разные в том смысле, что количество содержащихся элементов различается.
Но в моем Селекторе шаблонов я не могу выбрать один из шаблонов, потому что элемент, переданный методу SelectTemplate, всегда имеет значение null.
Я полагаю, я не понял, как шаблоны работают в wpf. Примеры, которые вы видите на микросфтах
Здесь вы можете увидеть, как я определил свои таблицы данных
<UserControl.Resources>
<DataTemplate x:Key="Any">
<StackPanel Orientation="Vertical">
<Label>Test</Label>
<Label>Test</Label>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="Non" >
<StackPanel Orientation="Vertical">
<Label>Test</Label>
</StackPanel>
</DataTemplate>
<selector:HeaderSelector
x:Key="ContentSelector"
AnyTemplate="{StaticResource Any}"
NonTemplate="{StaticResource Non}"/>
</UserControl.Resources>
Пользовательский элемент управления определяет ScrollView. В этом ScrollVewi я разместил ContentPresenter, который, в свою очередь, использует мой селектор шаблонов.
<ScrollViewer VerticalScrollBarVisibility="Auto" >
<ContentPresenter
ContentTemplateSelector="{StaticResource ContentSelector}"
DataContext="{Binding ElementName=MyProductFilerView, Path=HasAny}"
/>
</ScrollViewer>
Вызывается селектор. Моя точка останова поражена. но параметр item метода SelectTemplate всегда равен нулю. Поэтому я не могу решить, какой шаблон выбрать.
public class Selector : DataTemplateSelector
{
public DataTemplate NonTemplate { get; set; }
public DataTemplate AnyTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
switch (item)
{
default:
return base.SelectTemplate(item, container);
}
}
}
- Не могли бы вы объяснить, почему в моем примере элемент всегда равен нулю?
- И может быть, опишите, что нужно сделать для заполнения элемента значением?