2014-05-02 23 views
5

Tôi chắc chắn điều này là đơn giản nhưng tôi không thể tìm ra cách để làm điều đó. Về cơ bản tôi có một danh sách các khách hàng đến từ một cơ sở dữ liệu dịch vụ di động xanh. cho đến nay mọi thứ hoạt động tốt nhưng tôi muốn đặt mẫu mục cho mỗi mục trong một hộp danh sách dựa trên dữ liệu. Tôi có 2 mẫu, một cho các công ty và chỉ cho một người. Câu hỏi của tôi là cách áp dụng từng câu hỏi.Áp dụng nhiều Bảng dữ liệu vào danh sách Itemtemplate dựa trên dữ liệu

Templates

<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; 
    } 
} 

Trả lời

5

Bạn có thể sử dụng một DataTemplateSelector để tự động chọn DataTemplate dựa trên các dữ liệu ràng buộc để tài sản của bạn: Mã

mẫu:

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> 
Các vấn đề liên quan