2011-10-24 14 views
5

Posiadam pole listy WPF, w którym znajduje się kontrolka użytkownika o nazwie JUC.Lista różnych typów elementów sterujących użytkownika w formacie WPF

Działa to świetnie, a ponieważ jestem nowy w WPF, to już robi wrażenie. To, co chciałbym teraz zrobić, to mieć różne kontrolki użytkownika na liście w oparciu o powiązaną właściwość.

Czy to możliwe? Jeśli nie, jak inaczej powinienem to osiągnąć?

Używam listy, ponieważ chcę zezwolić na porządkowanie kropli/przeciągnięcia elementów sterujących użytkownika, i będzie numer zmiennej, więc wydaje się mieć sens - alternatywne podejścia są mile widziane.

<ListBox x:Name="peopleListBox" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch" 
    ItemContainerStyle="{StaticResource ListBoxItemStretch}" 
    Foreground="Transparent" 
    BorderBrush="Transparent" 
    Background="Transparent" 
    Grid.ColumnSpan="2" SelectionChanged="peopleListBox_SelectionChanged"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <my:JUC Margin="4"></my:JUC> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Odpowiedz

7

Można użyć DataTemplateSelector w SelectTemplate() metodzie można sprawdzić, które DataTemplate użyć do obecnie przekazywane w punkcie:

w XAML:

<!-- define templates in resources 
    ChartDataTemplate is a ChartDataTemplate.xaml, the same for other 
--> 
<UserControl.Resources> 
    <DataTemplate x:Key="ChartDataTemplate"> 
      <views:LineChartView /> 
    </DataTemplate> 

    <DataTemplate x:Key="GridDataTemplate"> 
     <views:PieChartView /> 
    </DataTemplate> 
</UserControl.Resources> 

<!-- ListView Itemtemplate should point to template selector --> 
<ItemsControl.ItemTemplate>  
    <DataTemplate> 
     <ContentPresenter 
      ContentTemplateSelector = "{StaticResource MyTemplateSelector}"> 

w kodzie za:

private sealed class MyTemplateSelector: DataTemplateSelector 
{ 

    public override DataTemplate SelectTemplate(
             object item, 
             DependencyObject container) 
    { 
     // 1. case item to your object which is bound to each ListView item 
     // 2. based on object type/state return correct DataTemplate 
     // as this.Resources["ChartDataTemplate"] or 
     // this.Resources["GridDataTemplate"] 
    } 
    } 
+0

Dziękuję bardzo! – Jonno

Powiązane problemy