【问题标题】:Silverlight Value ConverterSilverlight 值转换器
【发布时间】:2011-09-23 23:31:57
【问题描述】:

我有一个值转换器为来自数据库的传入字符串值运行,为性别设置适当的图标。传入的值必须是 M 或 F,其中任何一个都将分别显示男性或女性图标。绑定在某种程度上是有效的,因为图片出现了,但它只显示一组图标用于任一值。

值转换器代码如下:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  var gender = (string)value;
  Uri uri;
  uri = gender == "F" ?
          new Uri("../Resources/Icons/female_user.png", UriKind.Relative) :
          new Uri("../Resources/Icons/male_user.png", UriKind.Relative);
  return uri;
}


public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
  throw new NotImplementedException();
}

XAML如下

 <Image Margin="8" Width="35" Height="35"
        VerticalAlignment="Top" HorizontalAlignment="Center"
        Source="{Binding Gender, Converter={StaticResource genderConverter}}" />

该资源在 usercontrol.resources 中被引用,并且我认为所有内容都已正确绑定。那么为什么转换器总是只返回一个值呢?

【问题讨论】:

  • (1) “只为任一值显示一组图标”是什么意思? (2) 在代码中设置断点时会发生什么?它是否会返回一个意想不到的图标?
  • 正如 Ken 所说,设置一个断点:调试器应该让事情变得清晰。一种可能性是绑定源正在返回,例如"m" 和 "f" 因此与 "F" 的区分大小写匹配永远不会通过。另一个“doh!”可能是有人不小心为两种性别创建了相同的占位符图标,却忘记用最终的艺术作品更新它。

标签: silverlight xaml binding ivalueconverter


【解决方案1】:

试试这个...

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {

                var gender = (string)value;
                Uri uri;
                uri = gender == "F" ?
                        new Uri("../Resources/Icons/female_user.png", UriKind.Relative) :
                        new Uri("../Resources/Icons/male_user.png", UriKind.Relative);
                BitmapImage img_Gender = new BitmapImage(uri);
                return img_Gender;

        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return null;
        }

【讨论】:

  • 我解决了,我只需要一个gender.Trim() 来消除所有的空白。
【解决方案2】:

我只需要一个gender.Trim() 来消除所有的空白。

var gender = value.ToString();
        try
        {
            return gender.Trim() == "F" ? "../Resources/Icons/male_user.png" : "../Resources/Icons/female_user.png";
        }
        catch (Exception)
        {
            return "";
        }

这一切都已经解决了,而且很有效。感谢您的回答和“doh!”不过也有可能。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2014-07-24
    • 2011-09-09
    相关资源
    最近更新 更多