2013-02-12 3 views
1

Я хочу поместить изображения в свой ListBox, используя Binding.Windows Phone Image Binding

Ниже объект, содержащий URI-х:

_roomView.Room = new Room 
     { 
      Items = new List<Item> { 
      new Item {ItemType = ItemType.BlueKey, ImageUri = "/Escape;component/Images/Items/a.jpg"}, 
      new Item {ItemType = ItemType.Bracelet, ImageUri = "/Escape;component/Images/Items/b.png"}, 
      new Item {ItemType = ItemType.Money, ImageUri = "/Escape;component/Images/Items/b.png"}} 
     }; 
     DataContext = _roomView; 

Ниже XML:

<ListBox x:Name="Mylist"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="5"> 
         <Image Source="{Binding Room.Items.ImageUri}" Stretch="None" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Изображения не отображаются.

Может ли кто-нибудь увидеть, где я ошибаюсь?

ответ

4

Если изображение не отображено - проверьте дорожки; Например мой код для связывания

public class Country 
{  
    public String name 
    { 
     get; 
     set; 
    }  
    public String Flag 
    { 
     get 
     { 
      return "/Image/Countries/" + name + ".png"; 
     } 
    } 
} 


<Image Width="100" Height="140" HorizontalAlignment="Left" Stretch="UniformToFill"> 
    <Image.Source> 
     <BitmapImage UriSource="{Binding Flag}" CreateOptions="BackgroundCreation" /> 
    </Image.Source> 
</Image> 

Если Вы используете изображения из проекта убедитесь, что Тое Сложение к содержанию и всегда скопировать в каталог вывода. (Свойство изображений)

Кстати, если вы хотите показывать изображения из Интернета вы должны использовать LowProfileImageLoader вы можете прочитать больше об этом http://blogs.msdn.com/b/delay/archive/2010/09/02/keep-a-low-profile-lowprofileimageloader-helps-the-windows-phone-7-ui-thread-stay-responsive-by-loading-images-in-the-background.aspx

<Image delay:LowProfileImageLoader.UriSource= "{Binding Flag}" HorizontalAlignment="Left" Stretch="Fill" VerticalAlignment="Center" Width="24" Height="16" Margin="0,0,10,0" /> 
+0

большое спасибо. Это было очень информативно! – Subby

+0

Небольшое примечание к этому решению ... Вам не нужен lowprofileimageloader, если вы немного измените свой xaml! Использование: это приведет к загрузке изображения на backgroundthread, если оно еще не доступны в кеше телефона. (см. ссылку на MSDN [здесь] (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapcreateoptions (v = vs.95) .aspx)) – Depechie

0

Вместо того чтобы делать

DataContext = _roomView; 

я сделал:

Mylist.ItemsSource = _roomView.Room.Items; 

и в XML:

<Image Source="{Binding ImageUri}" Stretch="None" /> 

Приведенные выше показывает "ImageUri" вместо Room.Items.ImageUri так Я уже перехожу в Rooom.Items.