首页 > 解决方案 > 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; }
}

标签: xamarinmvvmxamarin.forms

解决方案


在 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));
}
 }
    }

推荐阅读