2014-10-01 8 views
3

У меня есть два списка, по умолчанию и пользовательские. Один использует DataTemplateSelector правильно, а другой просто использует стандартные DataTemplates, которые никогда не вызывают селектор;DataTemplateSelector не работает, если ItemContainerStyle установлен

//shows correctly 
<ListBox Name="testlb" ItemTemplateSelector="{StaticResource ffDataTemplateSelector}"/> 

//now showing correctly (using default DataTemplates instead of selector) 
<local:FFBox x:Name="myFFBox" ItemTemplateSelector="{StaticResource ffDataTemplateSelector}" ItemContainerStyle="{StaticResource FFItemStyle}" /> 

Оба имеют тот же самый источник

testlb.ItemsSource = CollectionViewSource.GetDefaultView(FileCollectionView); 
myFFBox.ItemsSource = CollectionViewSource.GetDefaultView(FileCollectionView); 

Очевидно, что нет ничего плохого в DataTemplateSelector, как она работает правильно на testlb

Проблема ItemContainerStyle="{StaticResource FFItemStyle}", который я использую, чтобы определить общий вид для каждого ListBoxItem, содержит триггеры, анимация и т. д. Если он присутствует, селектор не работает.

<Style x:Key="FFItemStyle" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListBoxItem"> 
     <Grid x:Name="mygrid"> 
      <ContentPresenter x:Name="ContentPresenter" 
       Content="{TemplateBinding Content}"           
       ContentTemplate="{TemplateBinding ContentTemplate}"/> 

Как сохранить ItemContainerStyle и все еще быть в состоянии изменить DataTamplates с DataTemplateSelector?

EDIT: решаемые, мы должны держать его, поскольку это один из тех нелогичных и не очень хорошо документированных вещей в МОФ.

ответ

4

Получил его: Если у вас определен ItemContainerStyle, вместо ItemTemplateSelector необходимо использовать ContentTemplateSelector в ContentPresenter с DataTemplateS избиратель.

<ContentPresenter x:Name="ContentPresenter" Content="{TemplateBinding Content}" 
       ContentTemplateSelector="{StaticResource ffDataTemplateSelector}" 
+0

Чувак, он работает; отметьте это как ответ. – Boris

0

ммм код выглядит нормально, но вы пробовали настройки ItemTemplateSelector это как этот

в Generic.xaml

<Setter Property="ItemTemplateSelector"> 
     <Setter.Value> 
      <helpers:ffDataTemplateSelector x:Name="ffDataTemplateSelector" /> 
     </Setter.Value> 
    </Setter> 

где хелперы устанавливается как это в верхней части Generic.xaml

xmlns:helpers="using:[Namespace where ffDataTemplateSelector resides]" 
+0

См. Править. Проблема с ItemContainerStyle, но я не знаю, как ее сохранить и по-прежнему использовать selector – Daniel

Смежные вопросы