2

我正在尝试加载绑定到带来项目列表的数据库的 ListView。在 ListView 中,我显示了两个列,“Items”和“Status”。我能够带来值,但现在我想将状态中的值替换为图像。

例子:

1 = images/green.png
2 = images/red.png
3 = images/orange.png

我想在列表中显示图像,以便用户导航时,他们会自动看到所有图像。我在另一个问题中发现了类似的东西,但它内置了我无法在 ListView 中执行的图像标签。 WPF将整数转换为图像而无需数据库绑定

感谢帮助。

编辑

Partial Class ImgConverter
    Implements IValueConverter

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object
        Dim imageIndex As Integer
        If Integer.TryParse(value.ToString(), imageIndex) Then
            Select Case imageIndex
                Case 1
                    Return BitmapSource = "Images/green.png"
                Case 2
                    Return BitmapSource = "Images/red.png"
            End Select
        End If
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object
        Throw New NotImplementedException()
    End Function

End Class

使用此代码,我得到一个 IntelliSense 错误 BitmapSource 并实现 IvalueConverter,说我需要实现一个 ConvertBack,我做到了,但它仍然困扰着我。

编辑#3

好的 BITMAPSOURCE 错误是 BC 我没有声明变量。解决了。

IValueConverter 错误说:错误 2 类“ImgConverter”必须为接口“System.Windows.Data.IValueConverter”实现“函数 ConvertBack(值作为对象,targetType 作为类型,参数作为对象,文化作为 Globalization.CultureInfo)作为对象”。...\Config (ABM,20)\RangoPage.xaml.vb 14 有说服力

4

2 回答 2

4

使用 IValueConverter,

它将一个整数作为参数,并返回一个 BitmapSource

<ListView ItemsSource="{Binding Collection}">
   <ListView.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <Textblock Text="{Binding Item}" />
            <Image Source="{Binding Status, Converter={StaticResource ValueConverter}}" />
         </StackPanel>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

public class IntToImageConverter : IValueConverter
{
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int imageIndex;
            if(int.TryParse(value.ToString(), out imageIndex))
            {
               switch(imageIndex)
               {
                 case 1:
                  return new ImageSource("images/red.png")

                 etc...
               }
            }

            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
}
于 2013-04-11T15:28:15.353 回答
0

以防万一您需要在UWP应用程序中使用它,有工作方法。

C#

 public sealed class IntStateToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            try
            {
                var imagePath = "ms-appx:///Assets/Buttons/";
                DeviceNodeTechStateEnum state = value.ObjectToEnums<DeviceNodeTechStateEnum>();
                switch (state)
                {
                    case DeviceNodeTechStateEnum.OK:
                        imagePath += "correct.png";
                        break;
                    case DeviceNodeTechStateEnum.BAD:
                        imagePath += "incorrect.png";
                        break;
                    default:
                        imagePath += "unknown.png";
                        break;
                }

                Uri imageUri = new Uri(imagePath, UriKind.Absolute);
                BitmapImage imageBitmap = new BitmapImage(imageUri);
                return imageBitmap;
            }
            catch (Exception)
            {
            }

            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            return !(value is bool && (bool)value);
        }
    }

ms-appx:///Assets/Buttons/您保存图像的项目文件夹在哪里。

用户控件的 XAML

   <Image  Source="{Binding State, Converter={StaticResource intStateToImageConverter}}" Width="20" Height="20" ></Image>

哪里是State类的一个字段有类型DeviceNodeTechStateEnum

APP的XAML

<Application.Resources>
  <ResourceDictionary>
    <common:IntStateToImageConverter x:Key="intStateToImageConverter" />

C# 枚举

public enum DeviceNodeTechStateEnum
{
        Undefined = 1,
        OK = 2,
        BAD = 3,
}

转换object为的方法enums

public static class Extensions
{
        public static T ObjectToEnums<T>(this object o)
        {
            T enumVal = (T)Enum.Parse(typeof(T), o.ToString());
            return enumVal;
        }
}
于 2019-01-29T03:51:31.143 回答