c# - 如何在 Xamarin 表单的 ListView 中绑定本地嵌入图像?
问题描述
我有一个ListView
XAML 和一个List<string>
包含本地嵌入图像路径的。我无法在列表中显示图像。顺便说一句,我可以通过
<Image Source="{local:ImageResource TypingApplication.Images.Icons.Search.png}" />
但我无法在ListView
. 这是我的 XAML 代码
<ListView x:Name="ListView"
ItemsSource="{Binding ListItems}"
IsEnabled="True"
IsVisible="True"
RowHeight="40"
Opacity="0.9">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Image Source="{local:ImageResource TypingApplication.Images.Icons.{Binding .}}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我已经ImageResourceExtension
在Extensions
文件夹和xmlns:local="clr-namespace:TypingApplication.Extensions"
XAML 中添加了,正如我提到的我可以显示单个图像,只有ListView
.
这是我的 C# 代码,其中包含 List 和 Constructor
public List<string> ListItems
{
get
{
return new List<string>()
{
"Home.png",
"Favorite.png",
"Search.png"
};
}
}
public HomePage()
{
InitializeComponent();
this.BindingContext = this;
}
请注意,我在我的项目中使用共享图像。我已将所有图像的属性设置为Embedded resource
in SolutionExplorer
。
解决方案
- 将列表更改为
ObservableCollection
IValueConverter
实现将您的绑定转换为所需的值- 图像属性应设置为
EmbeddedResource
public class EmbeddedToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string fileName && parameter is String assemblyName)
{
try
{
var imageSource = ImageSource.FromResource(assemblyName + "." + fileName, typeof(EmbeddedToImageSourceConverter).GetTypeInfo().Assembly);
return imageSource;
}
catch (Exception)
{
return value;
}
}
else
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
XAML
<ContentPage.Resources>
<local:EmbeddedToImageSourceConverter x:Key="converter"/>
</ContentPage.Resources>
在列表视图中添加我们刚刚创建的绑定 wrto 转换器资源。
<Image Source="{Binding ., Converter={StaticResource converter}, ConverterParameter='TypingApplication.Images.Icons'}"/>
推荐阅读
- css - 如何在 Vue.js 中向 Konva 层添加自定义 CSS 样式?
- python - 冒号运算符在python中导致未定义的行为
- php - WooCommerce 使用项目订单元将项目添加到订单
- eclipse - Eclipse 键绑定。设置执行特定运行配置的快捷方式
- reactjs - 如何使用 react-ga 在 ReactJS 中注册到 Google Adwords 的转换?
- python - 使用多处理池将 python 输出写入文件时遇到问题
- data-structures - 创建和可视化链接列表
- bootstrap-4 - 在引导程序 4 中将表缩小到屏幕大小
- unity3d - Print/Debug.log 在 Unity 控制台中不显示输出
- email - 域和子域之间的电子邮件不起作用