В моем проекте Silverlight мне нужно было использовать DataTemplateSelector
.
Я нашел способ реализовать это (поскольку его нет в платформе) здесь: http://www.codeproject.com/KB/silverlight/SLTemplateSelector.aspx
Этот метод работал правильно в других местах моего кода, но на этот раз он не работает.
Проблема в том, что TemplateSelector никогда не вызывается (я даже пытался установить точку останова в конструкторе, но она никогда не была достигнута). Вы видите проблему в моем коде? Я использовал конвертер отладки и увидел, что мои ListBox
ItemsSource
установлены правильно.
Заранее спасибо!
XAML:
<ListBox Name="DestinationsList" Grid.Column="2" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<helper:TargetTemplateSelector Content="{Binding}">
<helper:TargetTemplateSelector.FirstTemplate>
<DataTemplate>
<TextBlock Text="Test1" />
</DataTemplate>
</helper:TargetTemplateSelector.FirstTemplate>
<helper:TargetTemplateSelector.SecondTemplate>
<DataTemplate>
<TextBlock Text="Test2" />
</DataTemplate>
</helper:TargetTemplateSelector.SecondTemplate>
</helper:TargetTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
TemplateSelector класс:
public class TargetTemplateSelector : DataTemplateSelector
{
public DataTemplate FirstTemplate { get; set; }
public DataTemplate SecondTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MyClass1 target = item as MyClass1;
if (target != null)
{
if (target.Profile is MyClass2)
{
return this.FirstTemplate;
}
else if (target.Profile is MyClass3)
{
return this.SecondTemplate;
}
else
{
throw new NotImplementedException();
}
}
return base.SelectTemplate(item, container);
}
}