我有这堂课:
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);
}
上述方法可能会以某种方式使图像在保存到设备磁盘之前变小吗?
答案 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>
并保留你给出的模型类。