2010-10-11 5 views
1

Besoin d'aide dans ListBox DataBindg dans Silverlight pour Windows Phone. Le code comme suit:Comment lier des données ListBox dans Silverlight pour Windows Phone7

1) Sur la page charge de l'événement:

Note: Pictures est une collection d'image, PicNames est une collection de noms d'images.

var ml = new MediaLibrary(); 
var ChkPics = ml.Pictures; 
var PicNames = from p in ChkPics 
       where p.Name.Contains("s") 
       select p; 

2) Classe statique

public static class PhotoNames 
{ 
    private static List<string> m_Photoname = new List<string>(); 

    public static List<string> PhotoFileNames 
    { 
     get 
     { 
      return m_Photoname; 
     } 
     set 
     { 
      m_Photoname = value; 
     } 
    } 
} 

Après avoir obtenu tous les noms de fichiers photo dans les PicNames de cette façon:

Sur chargement de la page de l'événement:

var ml = new MediaLibrary(); 
var ChkPics = ml.Pictures; 
var PicNames = from p in ChkPics 
       where p.Name.Contains("s") 
       select p; 

foreach (var pic in PicNames) 
{ 
    PhotoNames.PhotoFileNames.Add(pic.Name); 
} 

Comment puis-je lier un ListBox à cette classe statique et afficher toutes les données dans TextBlock dans ListBox?

Merci.

Répondre

0

Il semble que ml.Pictures possède toutes les informations dont vous avez besoin (nom et image). Pourquoi avez-vous besoin de la classe statique?

Vous pouvez effectuer les opérations suivantes:

var ml = new MediaLibrary(); 
listBox.ItemSource = ml.Pictures.Where(picture => picture.Name.Contains("s")); 

Et dans votre XAML:

<UserControl.Resources> 
    <local:ImageConverter x:Key="ImageConverter"></local:ImageConverter> 
... 
</UserControl.Resources> 

<ListBox x:Name="listBox"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="120"></ColumnDefinition> 
       <ColumnDefinition Width="35"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
      </Grid.RowDefinitions> 

      <TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding Name}"></TextBlock> 
      <Image Grid.Column="1" Grid.Row="0" Source="{Binding Picture, Converter={StaticResource ImageConverter}}"></Image> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Le modèle montre à la fois le nom et l'image de l'image elle-même dans une miniature, si vous n'avez pas besoin de l'image, utilisez DisplayMemberPath à la place.

<ListBox x:Name="listBox" DisplayMemberpath="Name"> 
</ListBox> 


/// <summary> 
/// Converts an image path to the associated image. 
/// </summary> 
public class ImageConverter : IValueConverter 
{ 
    #region IValueConverter implementation 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string imagePath = (string)value; 
     Uri Uri = new Uri(imagePath, UriKind.Relative); 
     return new BitmapImage(Uri); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

Fonctionne partiellement comme aucun affichage d'image. base sur cette var ml = new MediaLibrary(); listBox.ItemSource = ml.Pictures.Where (image => picture.Name.Contains ("s")); – MilkBottle

+0

L'image ne s'affiche pas. baser l'instruction Where. J'ai fait des changements sur le XAML: Image en image ou Image. – MilkBottle

+0

L'image ne s'affiche pas. baser l'instruction Where. J'ai fait des changements sur le XAML: Image en image ou Image. – MilkBottle

Questions connexes