根据绑定值更改列表视图图像
本文关键字:列表 视图 图像 绑定 | 更新日期: 2023-09-27 18:31:15
我的程序连接到mysql数据库,然后将数据存储到listview中。我想在列表中显示项目的评级,以显示为图片而不是数字。查看此响应,我想出了如何使用数据触发器显示不同的图像,但我需要一种方法来指定数字范围。例如,0-10 = 0 星.png,11-50 = 1星.png,等等。
任何帮助将不胜感激。
编辑:经过一番思考,我相信我将能够在加载列表视图后运行一个函数,这是一个 for 循环,它将从列中的每一行获取值,确定它所在的数字范围,然后将其重新绑定到 listview。这会有效吗?
您可以使用转换器来做到这一点
- 将项目源绑定到您的数字列表
- 编写评级转换器以将数字转换为图像
- 更改项模板以显示图像
例如
-
XAML
<Window Name="ThisWnd" xmlns:local="clr-namespace:YourConverter's Namespace" <!-- the namespace of your converter. --> ...> <Window.Resource> <local:RatingConverter x:Key="RatingConverter"/> </Window.Resources> <ListView ItemsSource="{Binding Items, ElementName=ThisWnd}"> <ListView.ItemTemplate> <DataTemplate> <Image Source="{Binding Path=., Converter={StaticResource RatingConverter}}"> </Image> </DataTemplate> </ListView.ItemTemplate> </ListView> </Window>
-
代码隐藏
public partial class MainWindow : Window { public List<int> Items { get; set; } } [ValueConversion(typeof(int), typeof(Image))] public class RatingConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int rate = (int)value; string imagePath = "1star.png"; if (rate > 10) { imagePath = "2star.png"; } return new BitmapImage(new Uri(imagePath, UriKind.Relative)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }