问题描述
我有一个动态创建的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();
}
}