Привязка albumArt в AlbumCollection к списку - PullRequest
1 голос
/ 13 сентября 2011

Как я могу привязать AlbumArt к моему списку?

Мой код:

    <ListBox Name="albumLb" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="albumLb_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="0,0,0,17" >
                    <!--Replace rectangle with image-->
                    <Image Source="{Binding }"/>
                    <StackPanel Width="311">
                        <TextBlock Text="{Binding Name}" FontSize="28" />
                        <TextBlock Text="{Binding Artist}" Margin="12,-6,12,0"  Foreground="#FFE5CDCD"/>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

И в своем коде я использую:

albumLb.ItemsSource = library.Albums;

Я знаю, что яя могу получить AlbumArt с помощью library.Albums [int index] .getAlbumArt (), но я не знаю, как связать его с моим списком.

1 Ответ

3 голосов
/ 13 сентября 2011

Какой тип возвращает getAlbumArt()?Если это просто путь к файлу (скажем, в изолированном хранилище), вам придется написать конвертер для связывания.Кроме того, вместо функции с именем getAlbumArt() создайте свойство с именем AlbumArt вместо общедоступного метода получения, который позволит связываться с ним.Затем вы можете связать образ с помощью

<Image Source="{Binding AlbumArt}" />

. Затем создайте конвертер (с помощью интерфейса IValueConverter), который будет брать путь к файлу в изолированном хранилище, и загружатьэто в BitmapImage, который затем возвращается преобразователю в Image в вашем ListBox.

Этот вопрос содержит подробную информацию о том, как это сделать.


С другой стороны, если вам нужно загрузить изображение с какого-либо веб-сайта, используйте WebClient.OpenReadAsync.

WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(OnImageDownloadCompleted);
wc.OpenReadAsync(new Uri("www.mywebsite.com/albumart/album1.jpg", UriKind.Relative));

void OnImageDownloadCompleted(object sender, OpenReadCompletedEventArgs e)
{
  if (e.Error == null) {
    StreamResourceInfo sri = new StreamResourceInfo(e.Result as Stream, null);
    BitmapImage imgsrc = new BitmapImage();
    imgsrc.SetSource(sri.Stream);
  }
}
...