2011-10-24 11 views
5

Ben JUC adında bir kullanıcı denetimi barındıran bir WPF liste vardır denetler.WPF Liste

Bu harika çalışıyor ve bu wpf çok yeniyim zaten çok etkileyici. Şimdi yapmak istediğim, bağlı bir mülkiyete dayanarak listede farklı kullanıcı kontrollerine sahip.

Bu mümkün mü? Eğer değilse, bunu başka nasıl başarmalıyım?

Ben kullanıcı denetimleri damla/sürükleme sipariş izin istiyorum, çünkü bir liste kullanıyorum ve değişken bir sayı öylesine anlamda yapmak gibi görünüyor olacak - alternatif yaklaşımlar bekliyoruz. arkasında Code

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

: XAML içinde

:

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

cevap

7

Sen DataTemplate anda öğe geçirilen için hangi kontrol edebilirsiniz SelectTemplate() yöntemde, DataTemplateSelector kullanabilirsiniz

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

çok teşekkürler! – Jonno