我尝试自定义ListView
ViewCell
。我希望根据每个项目来源中的值显示图片。
如果该人是男性,则显示男性照片。否则就是女性。
例如
public class Person
{
string Name;
Gender Gender;
string SecretNumber;
}
因此,如果Gender == GenderType.Male
,则显示male.png
。否则female.png
。
最后,SecretNumber
。我希望用*
替换除了最后3个之外的所有字符。
如何在ViewCell
类中完成此类自定义?
例如
public PersonViewCell : ViewCell
{ ... }
答案 0 :(得分: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
使用here
我必须补充一点,在代码中处理跨平台图像时使用这个静态助手类也很有用:
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"))
答案 1 :(得分: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";
}
}
答案 2 :(得分:0)
我建议使用IValueConverter,这是一个实现接口的类。
示例:
{{1}}