2016-06-29 6 views
0

Welche Art von Liste müssen wir haben, um Quellen von Bildern mit ItemsControl zu binden. Ich habe ein Items wie folgt aus:Fehler beim ItemsControl für Image Type

<ItemsControl x:Name="championPicControl" Margin="10,0,516,63"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding}" Height="100" Width="100"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Und es wird mir eine Fehlermeldung, wenn ich tun:

 List<BitmapImage> list = new List<BitmapImage>(); 
     foreach(var i in summsList) 
     { 
      BitmapImage champ = new BitmapImage(); 
      champ.BeginInit(); 
      champ.UriSource = new Uri("Resources/championsSquare/" + i.championName + "_Square_0.png", UriKind.Relative); 
      champ.EndInit(); 
      list.Add(champ); 
     } 

     championPicControl.ItemsSource = list; 

Welche Art von Liste und was soll ich tun, um es Arbeit zu bekommen?

+1

Welchen Fehler sehen Sie? – FishStix

+0

Ich sehe 2 mögliche Probleme in Ihrem Code: Für eingebettete Ressourcen besser verwenden Sie UriKind.Absolute 'pack: // Anwendung: ,,,/[YourAssemblyName]; Komponente/Ressourcen/{Y ourImageName} .' Sie müssen ObservableCollection verwenden statt Liste – Anton

Antwort

1

Ressourcendatei URIs in Code hinter müssen voll sein Resource File Pack URIs. So sollen Sie den BitmapImages wie

var champ = new BitmapImage(new Uri(
    "pack://application:,,,/Resources/championsSquare/" + i.championName + "_Square_0.png")); 

schaffen Außer, dass es nicht unbedingt erforderlich ist, eine Liste des BitmapImages zu verwenden. WPF bietet eine automatische Typumwandlung von string, Uri und byte[] zum Typ ImageSource (der Typ der Image.Source-Eigenschaft).

Sie könnten also IEnumerable<string> mit den Ressourcen-URI-Strings auch der ItemsSource -Eigenschaft des ItemsControl zuweisen.

championPicControl.ItemsSource = summsList.Select(
    i => "pack://application:,,,/Resources/championsSquare/" + i.championName + "_Square_0.png");