如何自定义显示在Xamarin Forms列表's ViewCell中的数据?
本文关键字:ViewCell 数据 显示 自定义 Xamarin 列表 Forms | 更新日期: 2023-09-27 18:06:46
我正在尝试定制ListView
的ViewCell
。我希望根据每个项目源中的a值显示一张图片。
如果这个人是男性,那么展示一张男性的照片。否则为雌性。
。
public class Person
{
string Name;
Gender Gender;
string SecretNumber;
}
如果是Gender == GenderType.Male
则显示male.png
。else female.png
.
最后是SecretNumber
。我希望用*
替换所有的字符,除了最后3个。
如何在ViewCell
类中完成这种类型的自定义?
。
public PersonViewCell : ViewCell
{ ... }
一个可能的解决方案是在您的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"))
另一个可能的解决方案是重写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";
}
}
我建议使用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";
}
}