2015-03-25 49 views
0

我有这个类:绑定的ImageSource的列表列出

public class Car 
    { 
     public string Name { get; set; } 
     public ImageSource Image { get; set; } 
    } 

我有这样的ObservableCollection车:

private ObservableCollection<Car> _cars; 
    public ObservableCollection<Car> Cars 
    { 
     get { return _cars; } 
     set 
     { 
      _cars = value; 
      RaisePropertyChanged("Cars"); 
     } 
    } 

在我看来,我会likte到此集合竞价到ListView和显示图像和名称:

<ContentView Padding="5"> 
     <ListView x:Name="cars" 
       ItemsSource="{Binding Cars}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
      <ViewCell> 

       <Image Source="{Binding Image}"></Image> 
       <Label Text="{Binding Name}"></Label> 
      </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     </ListView> 
    </ContentView> 

但是只显示名称。我在这里错过了什么?有关如何将图像绑定到列表视图的任何提示?

谢谢!

UPPDATE: 错误似乎是与内存相关:

java.lang.OutOfMemoryError 
03-25 15:18:30.159 E/mono-rt (25597): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
03-25 15:18:30.159 E/mono-rt (25597): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
03-25 15:18:30.159 E/mono-rt (25597): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378) 
03-25 15:18:30.159 E/mono-rt (25597): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:417) 

我通常可以看到列表中的第一项exceprion发生之前。任何想法如何解决这个问题?

UPDATE2:

使用Xlabs Camera.function采取图像

林:

public async Task<MediaFile> TakePicture() 
     { 
      Setup(); 

      ImageSource = null; 

      return await _Mediapicker.TakePhotoAsync (new CameraMediaStorageOptions { 
       DefaultCamera = CameraDevice.Front, MaxPixelDimension = 20 
      }).ContinueWith (t => { 
       if (t.IsFaulted) 
       { 
        Status = t.Exception.InnerException.ToString(); 
       } 
       else if (t.IsCanceled) 
       { 
        Status = "Canceled"; 
       } 
       else 
       { 
        var mediaFile = t.Result; 

        ImageSource = ImageSource.FromStream(() => mediaFile.Source); 


        return mediaFile; 
       } 

       return null; 
      }, _scheduler); 
     } 

是它也许可能以某种方式在上述方法使图像变小,然后才会慢慢保存到磁盘设备?

回答

0

在模型类中,将BitmapImage用作图像属性的数据类型。 ImageSource的数据类型仅用于设置图像源的图像刷控制

public class Car 
    { 
     public string Name { get; set; } 
     public BitmapImage Image { get; set; } // Propery type should be BitmapImage 
    } 

在情况下,如果BitmapImage的类在PCL丢失,您可以使用下面的一个:

只需更换

<ImageBrush ImageSource="{Binding Image}"></Image> 

<Rectangle Height="100" Width="100"> 
<Rectangle.Fill> 
      <ImageBrush ImageSource="{Binding Image}"></Image> 
</Rectangle.Fill> 
</Rectangle> 

并保持你的模型类,因为你已经给。

+0

谢谢你非常mucg回答。 Unfortunatley在我的PCL中,我有模型。我没有访问BitMap类。有没有解决这个问题? – bugsy 2015-03-25 11:44:20

+0

在使用部分添加此代码'using System.Windows.Media.Imaging;' – 2015-03-25 12:11:11

+0

该类不存在于PCL中,因此无法添加。谢谢 – bugsy 2015-03-25 12:26:13