Как привязать данные ListBox в Silverlight для Windows Phone7 - PullRequest
1 голос
/ 11 октября 2010

Нужна помощь в ListBox DataBindg в Silverlight для Windows Phone.Код выглядит следующим образом:

1) Событие загрузки страницы:

Примечание. Изображения - это коллекция изображений, PicNames - коллекция имен изображений.

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

2) Статический класс

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;
        }
    }
}

После получения всех имен файлов фотографий в PicNames следующим образом:

Событие загрузки страницы:

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);
}

Как связатьListBox для этого статического класса и показать все данные в TextBlock внутри ListBox?

Спасибо.

1 Ответ

0 голосов
/ 11 октября 2010

Похоже, что ml.Pictures содержит всю необходимую информацию (имя и изображение).Зачем вам статический класс?

Вы можете сделать следующее:

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

И в вашем 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>

В шаблоне отображается имя картинки и само изображение в виде миниатюры. Если изображение вам не нужно, используйте вместо него DisplayMemberPath.

<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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...