2014-05-02 9 views
5

Jestem pewien, że jest to proste, ale po prostu nie mogę się dowiedzieć, jak to zrobić. Zasadniczo mam listę klientów, która pochodzi z bazy danych usług mobilnych. do tej pory wszystko działa dobrze, ale chciałbym ustawić szablon przedmiotu dla każdej pozycji w polu listy na podstawie danych. Mam 2 szablony, jeden dla firm i dla osoby. Moje pytanie brzmi, jak zastosować każdy z nich.Zastosuj wiele datathsetów do listbox Itembox na podstawie danych

Szablony

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

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

Kod

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

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

Odpowiedz

5

Można użyć DataTemplateSelector dynamicznie wybrać DataTemplate na podstawie danych powiązanych z swoimi właściwościami: Kod

Próbka:

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> 
Powiązane problemy