2014-08-28 2 views
0

MainWindow a pour XAML suivant comboboxAjout d'image aux valeurs combobox

MainWindowViewModel.xaml

<ComboBox Name="CountryComboBox" HorizontalAlignment="Left" Margin="40,170,0,0" VerticalAlignment="Top" Width="220" 
      ItemsSource="{Binding Countries, Mode=OneWay}" 
      SelectedValue="{Binding SelectedCountry, Mode=TwoWay}"> 
</ComboBox> 

MainWindowViewModel.cs

private string _SelectedCountry; 
public string SelectedCountry 
{ 
    get 
    { 
     return _SelectedCountry; 
    } 
    set 
    { 
     _SelectedCountry = value; 
     OnPropertyChanged("SelectedCountry"); 
    } 
} 

public List<string> Countries {get; set;} 
public MainViewModel() 
{ 
    Countries = new List<string>(); 
    var a = "Avganistan"; 
    var b = "Azerbeijan"; 
    Countries.Add(a); 
    Countries.Add(b);  
} 

Comment puis-je ajouter des images à les valeurs de combobox de ces pays?

Répondre

0

a) déclarer une classe Country appropriée qui implémente l'INotifyPropertyChanged interface et qui a des propriétés string Name et ImageSource et un constructeur qui prend ces paramètres d'entrée.

b) Mettez à jour la définition de votre propriété Countries pour qu'elle soit de type ObservableCollection<Country>.

c) Ajouter des éléments de cette nouvelle classe dans votre nouvelle Countries collection:

Countries.Add(new Country("Some Country", 
    "pack://application:,,,/AppName;component/Images/Some Country Image.png")); 
Countries.Add(new Country("Other Country", 
    "pack://application:,,,/AppName;component/Images/Other Country Image.png")); 

d) Définir un DataTemplate pour votre Country classe (soit dans le XAML Resources où le ComboBox sera ou App.xaml):

<DataTemplate DataType="{x:Type YourPrefix:Country}"> 
    <StackPanel Orientation="Horizontal"> 
     <Image Source="{Binding ImageSource}" Stretch="None" /> 
     <TextBlock Text="{Binding Name}" /> 
    </StackPanel> 
</DataTemplate> 

e) Enfin, juste les données lient votre propriété de collection à la propriété ItemsSource d'un contrôle de collection:

<ComboBox ItemsSource="{Binding Countries}" /> 
+0

Il est pas nécessaire de remplacer '' list' avec ObservableCollection' provoque il est initialisé dans le constructeur de 'ViewModel' – monstr

+0

Il ne faut pas mettre en œuvre l'interface' INotifyPropertyChanged' soit, mais il est une bonne pratique. – Sheridan