xamarin - Xamarin 表单无法更改 Listview SelectedItem 上的图像
问题描述
我在列表视图中有一个标签和图像。当在 listview 上选择项目时,我必须更改图像。在视图模型中选择项目时,我正在获取图像名称和标签文本的当前值,但无法将图像更改为新图像。我在更改图像后调用了 onproperty。但值没有更新。请帮助..
<StackLayout >
<ListView x:Name="ser_area_list" HasUnevenRows="True" ItemsSource="{Binding Servicearealist }" SelectedItem="{Binding dd}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal" >
<Image Source="{Binding ImageName}" WidthRequest="30" HeightRequest="30" />
<Label Text="{Binding area}" VerticalTextAlignment="Center" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
视图模型:
public class PopChkVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public List<HSA_value> servicearealist = new List<HSA_value>();
HSA_value ab = new HSA_value();
public HSA_value dd
{
get
{
return ab;
}
set
{
ab = value;
if (ab == null)
return;
OnPropertyChanged("dd");
Debug.WriteLine(ab);
ab.ImageName = "checkedbox.png";
OnPopertyChanged("ImageName");
}
}
string imagename;
public string ImageName
{
set
{
imagename = value;
OnPopertyChanged("ImageName");
}
get
{
return imagename;
}
}
void OnPopertyChanged(string ImageName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(ImageName));
}
public List<HSA_value> Servicearealist
{
get { return servicearealist; }
set
{
servicearealist = value;
OnPropertyChanged("Servicearealist");
}
}
public PopChkVM()
{
GetHomeServiceAreas();
}
protected virtual void OnPropertyChanged(string servicearealist)
{
if (PropertyChanged == null)
return;
PropertyChanged(this, new PropertyChangedEventArgs(servicearealist));
}
private async void GetHomeServiceAreas()
{
RestClient dataService = new RestClient();
var items = await dataService.GetServiceArea();
if (items.status.Equals("success"))
{
Servicearealist = new List<HSA_value>();
foreach (HSA_Data data in items.data)
{
HSA_value hSA_Value = new HSA_value();
hSA_Value.area = data.area;
hSA_Value.ImageName = "unchecked.png";
Servicearealist.Add(hSA_Value);
}
}
else
{
DependencyService.Get<IToast>().LongAlert("No Data Available!");
}
}
}
模型:
public class HSA_value
{
public string id { get; set; }
public string area { get; set; }
public string ImageName { get; set; }
}
解决方案
在 HSA_value 类中执行以下代码
public class HSA_value : INotifyPropertyChanged
{
public string id { get; set; }
public string area { get; set; }
string imageName = string.Empty;
public string ImageName {
get
{
return imageName;
}
set
{
imageName = value;
PropertyChanged(this, new PropertyChangedEventArgs(ImageName));
}
}
}
推荐阅读
- powershell - Windows $env:path ="$($env:path);." 它是在哪里添加的?
- c# - Azure 密钥管理 API [功能键]
- android - 通过 Knox SDK 从 Android 10 上的手机中提取 IMEI
- xamarin.android - 在 APK 外复制数据库
- yaml - 在另一个 yaml 文件中引用 yaml 中的嵌套列表
- c++ - 保持 MQTT 主题的消息排序
- graphql - 是否可以将动态类型的数据发送到 GraphQL,或者修改现有模式?
- python - Pandas 组合了多个数据透视表
- r - 是否可以为一个缺失值包含 NA,我可以验证每个人是否与我指定的函数相对应
- python - 如何使用上传(从火车)方法中的变量来预测方法?