使用CrossMedia从设备照片库中选择每个图像后,在ListView Xamarin中显示绑定的图像

时间:2018-06-18 09:56:01

标签: xamarin

我使用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包围它并且不会返回任何堆栈跟踪或信息崩溃的位置。

我认为它与流有关,但无法弄清楚到底是什么。如果有人绝对有任何关于为什么这样做的想法,那就太好了。我希望我能够很好地解释错误。感谢。

0 个答案:

没有答案