【问题标题】:Windows Phone 8.1 RT - ItemTemplateSelector - Not Binding the FullmodeWindows Phone 8.1 RT - ItemTemplateSelector - 未绑定全模式
【发布时间】:2016-04-04 12:53:27
【问题描述】:

我正在开发 Windows phone 8.1 RT 应用程序。我正在使用组合框。有 20 多个运算符要绑定到组合框。当我们在 Combobox 上进行选项卡时,App 应该以完整模式打开所有 20 个 opetaros。我需要两个不同的模板,当项目以完整模式打开时应使用一个模板(图像和文本块),当在完整模式项目中选择项目时应使用另一个模板(仅 TextBlock)。继承 DataTemplateSelector 并创建新的 DataTemplateSelector。 ItemTemplateSelector 分配有新继承的 DataTemplateSelector。下面是使用的代码。

<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}"
      />

模板选择器

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 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 显示所选项目。但是绑定Datasource时没有命中SelectTemplateCore。

这段代码有什么问题?为什么不使用 DropDownItemsTemplate 来绑定项目?

提前致谢

【问题讨论】:

    标签: windows-runtime windows-phone-8.1 windows-8.1 windows-8.1-universal


    【解决方案1】:

    因为当您在 xaml 中指定模板选择器时,属性会使用相同的数据模板“SelectedOperatorDataTemplate”进行初始化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多