【问题标题】:Apply multiple Datatemplates to listbox Itemtemplate based on data根据数据将多个Datatemplates应用到listbox Itemtemplate
【发布时间】:2014-06-18 19:30:16
【问题描述】:

我确定这很简单,但我似乎不知道该怎么做。基本上,我有一个来自 azure 移动服务数据库的客户列表。到目前为止一切正常,但我想根据数据为列表框中的每个项目设置项目模板。我有 2 个模板,一个用于公司,一个用于个人。我的问题是如何应用每一个。

模板

<DataTemplate x:Key="CompanyItemTemplate">
    -------
</DataTemplate>

<DataTemplate x:Key="CustomerItemTemplate">
    -------
</DataTemplate>

代码

CustomerListItems.ItemsSource = customeritems.OrderBy(customer => customer.CustomerName);

foreach (Customers customer in customeritems)
{
    if (customer.Company != "")
    {
        CustomerListItems.ItemTemplate = CompanyItemTemplate;
    }
    else
    {
        CustomerListItems.ItemTemplate = CustomerItemTemplate;
    }
}

【问题讨论】:

    标签: c# winrt-xaml datatemplate windows-8.1 listboxitem


    【解决方案1】:

    您可以使用DataTemplateSelector 根据绑定到您的属性的数据动态选择DataTemplate

    示例代码:

    public class ImgStringTemplateSelector : DataTemplateSelector
    {
      public DataTemplate ImageTemplate { get; set; }
      public DataTemplate StringTemplate { get; set; }
    
      public override DataTemplate SelectTemplate(object item, 
        DependencyObject container)
      {
        String path = (string)item;
        String ext = System.IO.Path.GetExtension(path);
        if (System.IO.File.Exists(path) && ext == ".jpg")
          return ImageTemplate;
        return StringTemplate;
      }
    }
    
      <Window.Resources>
        <local:RelativeToAbsolutePathConverter x:Key="relToAbsPathConverter" />
    
        <DataTemplate x:Key="stringTemplate">
          <TextBlock Text="{Binding}"/>
        </DataTemplate>
    
        <DataTemplate x:Key="imageTemplate">
          <Image Source="{Binding Converter={StaticResource relToAbsPathConverter}}" 
                 Stretch="UniformToFill" Width="200"/>
        </DataTemplate>
    
        <local:ImgStringTemplateSelector 
            ImageTemplate="{StaticResource imageTemplate}" 
            StringTemplate="{StaticResource stringTemplate}" 
            x:Key="imgStringTemplateSelector" />
      </Window.Resources>
    
      <Grid>
        <ListView ScrollViewer.CanContentScroll="False" 
                  ItemsSource="{Binding ElementName=This, Path=PathCollection}" 
                  ItemTemplateSelector="{StaticResource imgStringTemplateSelector}">
        </ListView>
      </Grid>
    </Window>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多