2011-10-24 14 views
5

मेरे पास एक WPF सूची बॉक्स है जिसमें उपयोगकर्ता नियंत्रण होता है जिसे JUC कहा जाता है।डब्ल्यूपीएफ उपयोगकर्ता नियंत्रण के विभिन्न प्रकारों की सूची

यह बहुत अच्छा काम करता है और क्योंकि मैं WPF के लिए बहुत नया हूं, यह पहले से ही बहुत प्रभावशाली है। अब मैं क्या करना चाहता हूं, एक बाध्य संपत्ति के आधार पर सूची में अलग-अलग उपयोगकर्ता नियंत्रण हैं।

क्या यह संभव है? यदि नहीं, तो मुझे यह और कैसे प्राप्त करना चाहिए?

मैं एक सूची का उपयोग कर रहा हूं क्योंकि मैं उपयोगकर्ता नियंत्रणों के ड्रॉप/ड्रैग ऑर्डरिंग की अनुमति देना चाहता हूं, और एक वैरिएबल नंबर होगा, इसलिए समझ में आता है - वैकल्पिक दृष्टिकोण का स्वागत है।

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

उत्तर

7

आप DataTemplateSelectorSelectTemplate() विधि में उपयोग कर सकते हैं, तो आप देख सकते हैं कि DataTemplate वर्तमान आइटम में पारित करने के लिए उपयोग करने के लिए: पीछे

<!-- 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 में

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

बहुत बहुत धन्यवाद! – Jonno

संबंधित मुद्दे