0

我正在尝试自定义 aListViewViewCell. 我希望根据每个项目源中的 a 值显示一张图片。

如果此人是男性,则显示男性图片。否则为女。

例如。

public class Person
{
    string Name;
    Gender Gender;
    string SecretNumber;
}

所以如果Gender == GenderType.Male那么显示male.png. 否则female.png

最后,SecretNumber. 我希望用*除了最后 3 个之外的所有字符替换所有字符。

这种类型的定制如何在ViewCell课堂上完成?

例如。

public PersonViewCell : ViewCell
{ ... }
4

3 回答 3

1

一种可能的解决方案是在您的Person班级中拥有另一个属性:

private ImageSource image
{
   get
   {
      if (Gender == Gender.Male)
      {
         return ImageSource.FromFile("Male.png")
      }
      else if (Gender == Gender.Female)
      {
         return ImageSource.FromFile("Female.png")
      }
   }
}

然后以您的方式绑定到它ViewCell

<Image Source="{Binding image}"/>

但是,如果您想进一步了解它,而不仅仅是图像并ViewCell根据此属性重新设置整体样式,我建议您查看这里DataTemplateSelector使用的

我必须补充一点,在代码中处理跨平台图像时,使用这个静态帮助器类也可能很有用:

public static class ImageSourceHelper
{
    public static string CrossPlatformImage(string resource)
    {
        return Device.OnPlatform(string.Concat("resources", resource), resource, string.Concat("resources", resource));
    }
}

你会像这样使用它:

     return ImageSource.FromFile(ImageSourceHelper.CrossPlatformImage("Male.png"))
于 2015-08-06T15:24:26.053 回答
1

另一种可能的解决方案是覆盖OnBindingContextChanged方法:

public class PersonViewCell : ViewCell
{
    Image image;

    public PersonViewCell()
    {
        image = new Image();
    }

    protected override void OnBindingContextChanged()
    {
        base.OnBindingContextChanged();

        var person = BindingContext as Person;
        image.Source = person.Gender == GenderType.Male ? "Male.png" : "Feale.png";
    }
}
于 2015-08-06T16:00:31.690 回答
0

我建议使用 IValueConverter,嗯,一个实现接口的类。

例子:

public class GenderToImageConverter : IValueConverter
{
    public object Convert(object value, object parameter, CultureInfo cultureInfo)
   {
        Gender gender = (Gender)value;
        if(gender == Gender.Female)
            return "male.png";
        else
            return "female.png";
   }
}
于 2017-10-12T02:01:22.477 回答