根据绑定值更改列表视图图像

时间:2013-09-14 19:07:07

标签: c# mysql wpf listview

我的程序连接到mysql数据库,然后将数据存储到listview中。我想在列表中显示项目的评级,以显示为图片而不是数字。看看这个response,我想出了如何使用数据触发器显示不同的图像,但我需要一种方法来指定一系列数字。例如,0-10 = 0stars.png,11-50 = 1stars.png等......

非常感谢任何帮助。

编辑: 经过一番思考后,我相信我能够在加载listview之后运行一个函数,这是一个for循环,可以从列中的每一行获取值,确定它所在的数字范围,然后将其重新绑定到listview 。这会有效吗?

1 个答案:

答案 0 :(得分:1)

您可以使用转换器

来完成
  • 将ItemsSource绑定到您的号码列表
  • 编写评级转换器以将数字转换为图像
  • 更改ItemTemplate以显示图像

e.g。

  • 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();
        }
    }