我可以通过指定TableSection的名称来删除并附加在TableSection之后吗?

时间:2017-09-24 06:09:02

标签: xamarin xamarin.forms

我有一个应用程序,我经常删除tableSections并将其替换为另一个。这是我使用的典型代码:

  • TableSection 0 - 名为“Header”
  • TableSection 1 - 名为“Group”
  • TableSection 2 - 称为“卡片”

    if(tableView.Root.Count> 2) tableView.Root.RemoveAt(2); //删除名为“Cards”的部分 tableView.Root.Add(CreateTableSection());

我想让代码更清洁一点。有没有办法可以通过使用我分配给该部分的名称来删除tableSection,还有一种方法可以在命名部分之后追加?

2 个答案:

答案 0 :(得分:2)

var header = tableView.Root.FirstOrDefault(r => r.Title == "Header");

if (header != null) {
  tableView.Root.Remove(header);
}

或者,您可以在创建Header部分时保持对Header部分的引用,然后使用该引用将其删除。这使您无需在删除之前找到它。

答案 1 :(得分:0)

您可以为var filtered = myList.Where(p=>idList.Contains(p.Id)); 创建扩展方法,并使代码更清晰。

扩展方法

TabelRoot

<强>用法

public static class Extensions
{
    public static TableSection FindSection(this TableRoot root, string title)
    {
        return root.FirstOrDefault(r => r.Title == title);
    }

    public static bool AppendAfter(this TableRoot root, string title, TableSection toBeAdded)
    {
        var section = root.FindSection(title);
        if (section != null)
        {
            var index = root.IndexOf(section);
            root.Insert(index + 1, toBeAdded);
        }
        return false;
    }

    public static bool AppendBefore(this TableRoot root, string title, TableSection toBeAdded)
    {
        var section = root.FindSection(title);
        if (section != null)
        {
            var index = root.IndexOf(section);
            root.Insert(index, toBeAdded);
        }
        return false;
    }

    public static bool Remove(this TableRoot root, string title)
    {
        var section = root.FindSection(title);
        if (section != null)
            return root.Remove(section);
        return false;
    }

    public static bool Replace(this TableRoot root, TableSection newSection)
    {
        var section = root.FindSection(newSection?.Title);
        if (section != null)
        {
            var index = root.IndexOf(section);
            root.RemoveAt(index);
            root.Insert(index, newSection);
        }
        return false;
    }
}