我使用CrossMedia插件在PictureViewModel中成功选择了一张图片,并将其作为byte []存储在Picture对象中。稍后我想使用以下xaml代码在该数组的不同页面上显示此图片:
<ListView.ItemTemplate >
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" Padding="20">
<StackLayout Orientation="Horizontal">
<Image Source="{Binding MyImageSource}"></Image>
<StackLayout Orientation="Vertical">
<Label Text="{Binding PicTitle, StringFormat='Picture Title: {0}'}" FontAttributes="Bold"></Label>
<Label Text="{Binding PicComment, StringFormat='Comments:: {0}'}"></Label>
</StackLayout>
</StackLayout>
</StackLayout>
<ViewCell.ContextActions>
<MenuItem Clicked="MenuItem_OnClicked" Text="Remove" IsDestructive="True" CommandParameter="{Binding .}"/>
</ViewCell.ContextActions>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
正如您所见,ImageSource绑定到MyImageSource。在viewmodel中我使用
private ImageSource ImageSourceFromByteArray(byte[] arr)
{
if (arr != null && arr.Length > 0)
{
var stream = new MemoryStream(arr);
return ImageSource.FromStream(() => stream);
}
return null;
}
将对象内的byte []传递给绑定到XAML的ImageSource对象。第一次选择图片时效果很好。但是,如果我继续将此选择替换为另一张图片则不起作用。它在执行结束时崩溃并出现null异常,即使我用try和catch包围它并且不会返回任何堆栈跟踪或信息崩溃的位置。
我认为它与流有关,但无法弄清楚到底是什么。如果有人绝对有任何关于为什么这样做的想法,那就太好了。我希望我能够很好地解释错误。感谢。