0

Я разрабатываю Windows phone 8.1 RT приложение. Я использую Combobox. Для Combbox доступно более 20 операторов. при входе в Combobox приложение должно открыть все 20 opetaros в полном режиме. Мне нужны два разных шаблона, должен использовать один шаблон (изображение и текстовый блок), когда элементы открывается в полноэкранном режиме и в другом шаблоне (только TextBlock), когда элемент выбран из элементов полного режима. DataTemplateSelector наследуется и создает новый DataTemplateSelector. ItemTemplateSelector назначается с наследуемым DataTemplateSelector. Ниже используется код.Windows Phone 8.1 RT - ItemTemplateSelector - не привязка к 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}" 
             /> 

товары не являются обязательными, когда мы вкладка выпадающий, показывающая список имен. Но, выбрав элемент в полном режиме, выбирается SelectTemplateCore, а выбранный элемент показан с помощью SelectedItemTemplate. Но SelectTemplateCore не используется при привязке Datasource.

В чем проблема с этим кодом? Почему DropDownItemsTemplate не используется для привязки элементов?

Заранее спасибо

ответ

0

Потому что, когда вы определяете селектор шаблона в XAML, свойства инициализируются с тем же DataTemplate «SelectedOperatorDataTemplate»

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