2016-03-20 24 views
0

Ekli özellikleri öğrenmeye yeni başlamıştım ve bu, özel UserControl yeniden kullanılabilirlik hakkında yepyeni bir bakış açısı açabilir.WPF çalışma için bağlama senaryosu alamıyor

Metinle görüntünün yanında basit bir ComboBox denetimi tasarlamak istiyorum. ComboBox ait

<ComboBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Image Width="30" 
           Height="30" 
           Margin="0" 
           Source="{Binding ???}" 
           VerticalAlignment="Center"/> 
         <TextBlock Margin="5" 
            Text="{Binding ???}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 

ItemsSource herhangi bir nesne olacak: Ben TextBlock ve Image sahiptir ItemTemplate ile ComboBox tutan benim UserControl var. Sorunsuz bir DependencyProperty aracılığıyla ItemsSource maruz bırakabilir, ama sonra ItemSource bağlı nesnenin özellikleri benim TextBlock ve Image bağlanma ComboBox arasında DataTemplate nasıl söyleyeceğimi bilemiyorum.

<customControls:ImageComboBox HorizontalAlignment="Left" 
             Margin="24,197,0,0" 
             VerticalAlignment="Top" 
             Width="142" 
             Height="46" 
             ComboBoxHint="Country" 
             ComboBoxItemsSource="{Binding CountryCollection}" 
             ComboBoxSelectedValue="{Binding SelectedCountry}"/> 
+1

Soru şu ki, uygun bir ItemTemplate ile standart bir ComboBox kullanmak yerine, bunu neden yaparsınız? ItemTemplate'deki bağlamalar, belirli bir görünüm modeli sınıfına özeldir, bu nedenle bir ItemTemplate'i bildirmek için her zaman işe yaramazsınız. – Clemens

cevap

-1

Bu koleksiyondaki öğe türüne bağlıdır ItemsSource için ayarlanacak: Burada

benim kontrolüm numune kullanımıdır. Diyelim ki, tip aşağıdaki sınıftır. Daha sonra ilgili DataTemplate aşağıdaki gibi olacaktır: Daha sonra ilgili DataTemplate aşağıdaki gibi olacaktır; Clemens belirttiği gibi arada
<DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <Image Width="30" Height="30" Margin="0" 
       VerticalAlignment="Center" 
       Source="{Binding Flag}"/> 
     <TextBlock Margin="5" 
        Text="{Binding Name}"/> 
    </StackPanel> 
</DataTemplate> 

, mutlaka sıfırdan bir ComboBox oluşturmak gerekmez. Bu çok karmaşık bir kontrol. Görünümünün bir bölümünü şablona göre özelleştirebilirsiniz.