微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果未找到图像,请跳过ListView Xamarin表单中的记录 在Converter

如何解决如果未找到图像,请跳过ListView Xamarin表单中的记录 在Converter

我有一个动态创建的ListView。我想如果找不到图像,则跳过该行。我不确定这是否可行,但我只想显示带有图像的项目。

         <ListView.ItemTemplate>
            <DataTemplate>
                 <ViewCell>
                    <StackLayout x:Name="{Binding Name}" 
                                 Orientation="Horizontal"
                                 Padding="5">
                        <Image x:Name="categoryImage" Source="{Binding ImageID,Converter={StaticResource converter}}" 
                               Aspect="AspectFit" 
                               WidthRequest="130"/>
                        <Label x:Name="categoryLabel" Text="{Binding Description}"/>
                   </StackLayout> 
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

值转换器

 public class ImagePostValueConverter : IValueConverter
    {
        public int source { get; set; }

        public object Convert(object value,Type targettype,object parameter,CultureInfo culture)
        {
            var source = (int)value;
            if (source == 0)
                return null;
            var imageSource = ImageSource.Fromresource($"ERPProject.AllImages.MyImages.ea_{source }.png",typeof(ImagePostValueConverter).GetTypeInfo().Assembly);
            return imageSource;

        }

        public object ConvertBack(object value,CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

我正在从PCL库中的文件夹中提取这些图像。不太确定如何做到这一点。

编辑:已解决 如果有人遇到这个问题,我想出了一个可行的解决方案。 Lucas Zhang帮助我提出了这个解决方案,但我对其进行了调整以使其对我有效。 从本质上讲,我确实创建了一个全新的valueconverter,并将true或false绑定到StackLayout的IsVisible属性。但是,正弦的,我传入的是记录ID的ImageID,我只是将recordID用作ImageID,这也是我的图像命名的方式。(例如image_ID.png,因此Image_1.png)0不存在就像卢卡斯的答案中假设的那样。我使用了Assembly.GetExecutingAssembly().GetManifestResourceStream(myPathtoImage); 将其放在变量中,然后查看变量是否为null。如果是,则返回false。否则返回true,并在列表视图中显示该项目。

解决方法

您可以绑定 IsVisible

<StackLayout x:Name="{Binding Name}" 
             Orientation="Horizontal"
             Padding="5"
             IsVisible="Binding ImageID,Converter={StaticResource IsVisibleConverter}}"
             >
                        <Image x:Name="categoryImage" Source="{Binding ImageID,Converter={StaticResource converter}}" 
                               Aspect="AspectFit" 
                               WidthRequest="130"/>
                        <Label x:Name="categoryLabel" Text="{Binding Description}"/>
</StackLayout>

在Converter

public class IsVisibleConverter: IValueConverter
    {
        public int source { get; set; }

        public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
        {
            var source = (int)value;
            if (source == 0)
                return false;
            else
                return true;

        }

        public object ConvertBack(object value,CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。