2010-03-04 2 views
1

Je stocke les URL des images dans une base de données sql ce 3.5 sous forme de chaînes. Je veux récupérer les URL et les afficher dans la fenêtre principale de l'application. Voici le code:Conteneur WPF pour le modèle d'image

DataSet myDataSet; 

     private void OnInit(object sender, EventArgs e) 
     { 

      string connString = Properties.Settings.Default.SystemicsAnalystDBConnectionString; 
      OleDbConnection conn = new OleDbConnection(connString); 
      OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT url FROM Library;", conn); 

      myDataSet = new DataSet(); 
      adapter.Fill(myDataSet, "Library"); 
      myListBox.DataContext = myDataSet; 
     } 

Le premier problème est que je ne pense pas que la méthode onInit est déclenchée. Mais je ne connais pas la raison de cela.

Le deuxième problème concerne le fichier XAML. Je besoin d'un conteneur pour les images (comme la zone de liste pour les zones de texte) et que je ne saurai pas combien d'images sont là, je besoin d'une sorte d'un modèle:

      <DataTemplate> 
           <StackPanel> 
            <Image Source="{Binding Path=url}" /> 
           </StackPanel> 
          </DataTemplate> 

Mais il doit y avoir une sorte de récipient le datacontext est défini sur la source de données.

Quelqu'un peut-il m'aider?

Répondre

1

Vous pouvez personnaliser une zone de liste dans wpf assez facilement pour avoir des images, plutôt que du texte. Utilisez le ItemTemplate ou si vous souhaitez changer de contrôle, le ControlTemplate.

+0

Merci, Tony. Mais savez-vous comment lancer la méthode onInit()? J'ai besoin d'obtenir les données de la base de données lorsque la fenêtre s'ouvre. – EVA

0
<ListBox ItemsSource="{Binding Library}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate>  
     <Image Source="{Binding Path=url}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Le DataContext pour le ListBox doit être votre DataSet. Vous pouvez utiliser OnLoad au lieu de OnInit

Quoi qu'il en soit, je ne recommande pas le DataSet obligatoire, il serait plus faisable si vous créez la classe ViewModel pour votre bibliothèque et de créer une collection d'entités Bibliothèque