【问题标题】:Problem when I delete an item (ObservableCollection) from a ListView in Xamarin当我从 Xamarin 中的 ListView 中删除项目(ObservableCollection)时出现问题
【发布时间】:2019-05-06 19:16:21
【问题描述】:

我会把代码片段和我遇到的问题的结果放在最后。

EvidenciaItemVideModel.cs

private string caption;
private ImageSource thumb;     

public ImageSource Thumb
{
    get { return this.thumb; }
    set { SetValue(ref this.thumb, value); }
}

public string Caption
{
    get { return this.caption; }
    set { SetValue(ref this.caption, value); }
}

Listview 与以下属性相关联。

private ObservableCollection<EvidenciaItemViewModel> evidencias;
public ObservableCollection<EvidenciaItemViewModel> Evidencias
{
    get { return this.evidencias; }
    set { SetValue(ref this.evidencias, value); }
}

我在列表视图中添加项目的片段

    if (this.file != null)
    {
        this.Evidencias.Add(new EvidenciaItemViewModel {
            Caption = "Archivo " + (this.Evidencias.Count + 1),
            Thumb = this.ImageSource
        });                
    }

删除项目的过程如下。

public void RemoveEvidencia(EvidenciaItemViewModel obj)
{
    this.Evidencias.Remove(obj);
}

一切正常,我删除项目时遇到的问题;例如:如果我有 4 个项目并且我消除了数字 2,则复制最后一个元素的图像,直到消除的下一个元素的位置。我添加了几张图片来显示我的意思。

ListView loaded before removing item

Item removed, the image of the last element is replicated in the ones that follow it after the deleted element.

【问题讨论】:

  • 删除按钮方法的代码是什么?

标签: c# listview xamarin observablecollection imagesource


【解决方案1】:

删除按钮点击方法如下:

void OnDeleteClicked(Object sender, MyEventArgs args)
{
  Button btn = sender as Button;
  var evidenciaItemVideModel = btn.BindingContext as EvidenciaItemVideModel;
  EvidenciaVideModelInstance.RemoveEvidencia(evidenciaItemVideModel);
}

那么EvidenciaVideModel的RemoveEvidencia就可以工作了:

public void RemoveEvidencia(EvidenciaItemViewModel obj)
{
   Evidencias.Remove(obj);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多