我一直想知道的事情:如果我要实现某种列表,如 UI 小部件(这里没有假设特定的目标平台,但我使用 C# 来说明),我可以看到确定预选条目的三种方法我的列表。看看下面的存根。所有三个实现都有一个委托,它要求实现显示项目,而不是直接传递项目。这个想法是,只有当 UI 元素实际上将要显示时才会请求这些项目。
第一个实现有一个允许定义预选项目的设置器。
public class ListWidget<T>
{
public Action<IList<T>> GetListItems;
public SetPreselectedItem(T item)
{
this.preselectedItem = item;
}
}
或者:
这遵循了列表小部件在某些时候询问实现的想法——通过循环它知道的所有项目——是否应该预先选择一个项目。我在这里看到的优势:它允许多选。
public class ListWidget<T>
{
public Action<IList<T>> GetListItems;
public Action<bool> IsItemPreselected(T item);
}
或者:
这是在需要呈现其内容时询问预选项目的实现。
public class ListWidget<T>
{
public Action<IList<T>> GetListItems;
public T GetPreselectedItem();
}
如果我查看 Apple 的 UIKit,他们会使用第一种方法:列表要求显示数据,但直接设置所选项目。我在 setter 和最后一个版本中看到的问题:您可以设置任何值,即使列表中不存在该项目。如果要设置的项目确实存在于列表中,则需要额外检查。我已经在不同平台上看到了上述模式的所有变体,但我想知道是否有最好的方法?还是有另一个版本的实现它?