在点击一个按钮后继续在列表中添加项目
问题描述:
我在xamarin.forms中有一个简单的移动应用程序。我有一个按钮,点击后会触发一种通过相机扫描代码的方法。一旦扫描,它就会得到号码。但是,我想扫描几个代码并存储相应的编号。因此,在每次扫描后,我会再次点击该按钮进行扫描。在点击一个按钮后继续在列表中添加项目
我在C#代码如下:
public async void StoreNum()
{
ListNumbers = new ObservableCollection<string>();
var num = await ScanCodeVM.CodePage(); // returns a string
if (num != null)
{
ListNumbers.Add(num);
}
}
的问题是,该名单是抱着一个号码。经过另一次扫描, 它删除以前的号码并存储新的号码。
我的问题是如何使它存储以前的数字?
答
对于集合中只有唯一的数字之外
在我看来,你需要在这个函数之外创建你的列表,并在另一个函数中添加/删除表单。数字的点击方法
ListNumbers = new ObservableCollection<string>();
public async void StoreNum()
{
var num = await ScanCodeVM.CodePage(); // returns a string
if (num != null)
{
ListNumbers.Add(num);
}
}
// do something with that list.
答
- 实例化集合使用
HashSet<string>
public class NumberReader
{
public HashSet<string> Numbers { get; set; }
// Numbers instantiated in constructor
public NumberReader()
{
Numbers = new HashSet<string>();
}
// Executed when user click a button
public async Task Read()
{
var number = await ScanCodeVm.CodePage();
if (number != null)
{
Numbers.Add(number);
}
}
}
HashSet<T>.Add
方法将添加唯一的值。当给定值添加成功时它返回true
,当给定值已经存在于集合中时返回false
。
请勿使用async void
作为函数 - 因为所有可能的异常都将被“吞噬”。但事件处理程序可以使用async void
。
不要在每次点击时创建“ListNumbers”的新实例。例如,当应用程序启动时实例化列表。 – Fabio
哦。那是罪魁祸首吗?或者我应该将'var num'声明为一个数组? – cholo