0

Ich entwickle Windows Phone 8.1 RT App. Ich benutze Combobox. Es gibt mehr als 20 Operatoren, die an die Combox gebunden sind. Wenn wir auf die Combobox klicken, sollte die App alle 20 Opetaros im Vollmodus öffnen. Ich brauche zwei verschiedene Vorlagen, sollte eine Vorlage (Bild und Textblock) verwenden, wenn Elemente im Vollmodus und andere Vorlage (nur TextBlock) geöffnet wird, wenn ein Element zwischen den Vollmoduselementen ausgewählt wird. DataTemplateSelector wird geerbt und neuer DataTemplateSelector erstellt. ItemTemplateSelector wird mit dem neu geerbten DataTemplateSelector zugewiesen. Unterhalb wird der verwendete Code verwendet.Windows Phone 8.1 RT - ItemTemplateSelector - Keine Bindung an den Fullmode

<ComboBox Grid.Row="3" Grid.Column="0" Margin="15 5 0 0" 
     ItemsSource="{Binding Operators}" SelectedItem="{Binding SelectedOperator, Mode=TwoWay}" 
     Style="{StaticResource FullModeComboBoxStyle1}" ItemContainerStyle="{StaticResource FullModeComboBoxItemStyle1}" 
     VerticalAlignment="Top" 
     Height="65" 
     ItemTemplateSelector="{StaticResource ExploreTemplateSelector}" 
     /> 

TemplateSelector

public class ExploreTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate DropdownItemsTemplate { get; set; } 
    public DataTemplate SelectedItemTemplate { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     var parent = container; 

     while (parent != null && !(parent is ComboBoxItem) && !(parent is ComboBox)) 
      parent = VisualTreeHelper.GetParent(parent); 

     var inDropDown = (parent is ComboBoxItem); 

     return inDropDown 
      ? DropdownItemsTemplate 
      : SelectedItemTemplate; 

    } 
} 

Datatemplate

<DataTemplate x:Key="OperatorDataTemplate"> 
      <StackPanel Orientation="Horizontal" Margin="5 5 0 0" Height="Auto"> 
       <Image Source="{Binding ImageUri}" Height="35" Width="60" VerticalAlignment="Top" /> 
       <TextBlock Text="{Binding Name}" Style="{StaticResource ComboboxTextBlockStyle}" Margin="5 0 0 0" Width="120" VerticalAlignment="Top" TextWrapping="Wrap"/> 
      </StackPanel> 
     </DataTemplate> 

     <DataTemplate x:Key="SelectedOperatorDataTemplate"> 
      <TextBlock Text="{Binding Name}" Style="{StaticResource ComboboxTextBlockStyle}" Margin="5 0 0 0" Width="120" VerticalAlignment="Top" TextWrapping="Wrap"/> 
     </DataTemplate> 

     <class:ExploreTemplateSelector x:Key="ExploreTemplateSelector" DropdownItemsTemplate="{StaticResource SelectedOperatorDataTemplate}" 
             SelectedItemTemplate="{StaticResource SelectedOperatorDataTemplate}" 
             /> 

Artikel sind nicht verbindlich, wenn wir auf die Registerkarte Combobox, Liste der Namespace zeigt. Wenn Sie jedoch ein Element im Vollmodus auswählen, wird SelectTemplateCore ausgewählt und das ausgewählte Element wird mit SelectedItemTemplate angezeigt. Aber SelectTemplateCore wird beim Binden der Datenquelle nicht angezeigt.

Was ist das Problem in diesem Code? Warum wird DropDownItemsTemplate nicht zum Binden der Objekte verwendet?

Vielen Dank im Voraus

Antwort

0

Denn wenn Sie die Vorlage Selektor in der XAML angeben, werden die Eigenschaften mit dem gleichen Datatemplate „SelectedOperatorDataTemplate“

initialisiert