将ImageSource的列表绑定到列表

时间:2015-03-25 08:46:53

标签: android xaml xamarin

我有这堂课:

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

在我看来,我想把这个集合投标到列表视图并显示图像和名称:

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

上述方法可能会以某种方式使图像在保存到设备磁盘之前变小吗?

1 个答案:

答案 0 :(得分:0)

在Model Class中,使用BitmapImage作为Image Property的数据类型。 ImageSource数据类型仅用于设置ImageBrush控件的图像源

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

万一,如果PCL中缺少BitmapImage类,您可以使用下面的一个:

只需替换

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

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

并保留你给出的模型类。