绑定后的图像不会显示在列表框中

本文关键字:列表 显示 图像 绑定 | 更新日期: 2023-09-27 18:04:58

我有一个问题,在一个列表框绑定文本正在显示,但没有绑定图像。我下载并解析一个xml文件只是很好,并显示我想要的文本,但随后要根据状态显示图像。LinenameService显示OK,但是绑定图像完全没有显示。type只是用来调用GetImage方法(我知道不是很整洁)。然后,它应该根据状态设置ImageSource,但根本不显示图像。

 XElement XmlTweet = XElement.Parse(e.Result);
 var ns = XmlTweet.GetDefaultNamespace();
 listBox1.ItemsSource = from tweet in XmlTweet.Descendants(ns + "LineStatus")
                                   select new FlickrData
   {
 Linename = tweet.Element(ns + "Line").Attribute("Name").Value,                                     
 Service = tweet.Element(ns + "Status").Attribute("Description").Value,
 Atype = GetImage(tweet.Element(ns + "Status").Attribute("Description").Value)
    };

     public String GetImage(String type)
    {
      FlickrData f = new FlickrData();
        switch(type)
    {
        case "Good Service":
            f.Type = new BitmapImage(new Uri("/Images/status_good.png", UriKind.Relative));
            break;
        case "Minor Delays":
            f.Type = new BitmapImage(new Uri("/Images/status_minor.png", UriKind.Relative));
            break;
        case "Severe Delays":
            f.Type = new BitmapImage(new Uri("/Images/status_severe.png", UriKind.Relative));
            break;
        case "Planned Closure":
            f.Type = new BitmapImage(new Uri("/Images/status_minor.png", UriKind.Relative));
            break;
       }
      return "anything";
    } 

在FlickrData这是一个简单的获取设置与图像资源Type不显示。

 public class FlickrData

    {
        public string Linename { get; set; }
        public string Service { get; set; }
        public string Detail { get; set; }
        public ImageSource Type { get; set; }
        public string Atype { get; set; }
    }

绑定后的图像不会显示在列表框中

转换器在这种情况下会派上用场。

首先,应该像这样定义XAML中的图像
<Image Source="{Binding Path=Atype, Converter={StaticResource AtypeToImageConverter}}" Width="100" Height="100"/>

然后在项目中创建一个转换器类。(右键点击项目名称->选择添加->选择类别)

将类命名为" attypetoimageconverter "

public class AtypeToImageConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(ImageSource))
            throw new InvalidOperationException("The target must be an ImageSource");
        BitmapImage result = null;
        int type = value.ToString();
        switch (type)
        {
            case "Good Service":
                result = new BitmapImage(new Uri("/Images/status_good.png", UriKind.Relative));
                break;
            case "Minor Delays":
                result = new BitmapImage(new Uri("/Images/status_minor.png", UriKind.Relative));
                break;
            //other cases
        }
        return result;
    }
    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

,它就会起作用。你可以从你的FlickrData类中移除类型。如果有疑问,可以谷歌一下如何在c#中使用转换器