2016-01-29 2 views
1

У меня проблема с привязкой Dictionary<string, Bitmap> к моему combobox. Bitmaps сохраняются в файле ресурсов.Как связать словарь с растровым изображением с combobox

Это может загружает элементы в выпадающем списке:

ComboBoxLanguage.ItemsSource = Languages; 
ComboBoxLanguage.DisplayMemberPath = "Value"; 
ComboBoxLanguage.SelectedValuePath = "Key"; 
ComboBoxLanguage.SelectedValue = Settings.Default.language; 

Это мой словарь:

Languages = new Dictionary<string, Bitmap> 
{ 
    { "en-US", Properties.Resources.US}, 
    {"de-DE", Properties.Resources.DE} 
}; 

Но мой ComboBox только показывает Sysytem.Drawing.Bitmap

Может кто-нибудь мне помочь?

+0

Вы должны использовать 'BitmapSource' для растровых изображений в WPF (вместо WinForms 'Bitmap'). Затем вам нужно будет установить «ItemTemplate» ComboBox в DataTemplate с помощью элемента управления «Image», который использует свойство «Value» в качестве «Source». – Clemens

+0

Спасибо, это работает –

ответ

1

Возможно, вам нужно использовать ObservableCollection и сделать класс обертки.

public class ComboBoxData 
{ 
    public string Path { get; set; } 
    public string Text { get; set; } 
} 

В модели просмотра вы должны указать список элементов combobox.

public ObservableCollection<ComboBoxData> Languages { get; set; } 
public View() 
    { 
     InitializeComponent(); 

     this.Languages = new ObservableCollection<ComboBoxData>() 
          { 
           new MyComboboxData(){Path = "Image1.jpg", Text = "Text1"}, 
           new MyComboboxData(){Path = "Image2.jpg", Text = "Text2"} 
          }; 

     this.DataContext = this; 
} 

И в xaml привяжите свой combobox к этой коллекции.

<ComboBox Name="ComboBoxLanguage" ItemsSource="{Binding Languages}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image Source="{Binding Path}"/> 
        <TextBlock Text="{Binding Text}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 
Смежные вопросы