我的MVVM中的xamarin.Forms应用程序存在问题。我有一个ListView,我想在ItemTemplate中显示一个图像。为此,我创建了一个ImageRessource类:
[ContentProperty("Source")]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Source == null)
{
return null;
}
var imageSource = ImageSource.FromResource($"CoPro.Assets.{Source}");
return imageSource;
}
}
这是我的ListView的xaml:
<ListView ItemsSource="{Binding Series}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackLayout Orientation="Horizontal">
<Image Source="{images:ImageResource image.jpg}"/>
</StackLayout>
<Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
此外,我已经通过此命名空间设置了“图像”:xmlns:images =“clr-namespace:CoPro.Assets”
像这样,我的ListView为每个“系列”项显示相同的图片。 对于每个Item,都有一个带有图像路径的字符串属性。 我该如何展示每件商品的图片?
提前感谢您的帮助。
答案 0 :(得分:1)
我刚刚找到了解决方案。我不得不使用Image标签中的Source属性:
<ListView Grid.Row="1" x:Name="MainListView" ItemsSource="{Binding Series}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding ImageUrl, Converter={StaticResource StringToImageSourceConverter}}"
Aspect="AspectFill"
/>
<Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" />
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
解决方案是使用Converter,Source属性包含字符串。这个字符串被发送到我的转换器中的参数,如下所示:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
return ImageSource.FromResource($"CoPro.Assets.{value}");
}
else
{
return null;
}
}
在此代码&#34; $&#34; CoPro.Assets&#34;是我的图像文件的路径。
感谢您的帮助