2017-10-12 23 views
1

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

的問題是,該名單是抱着一個號碼。經過另一次掃描, 它刪除以前的號碼並存儲新的號碼。

我的問題是如何使它存儲以前的數字?

+5

不要在每次點擊時創建「ListNumbers」的新實例。例如,當應用程序啓動時實例化列表。 – Fabio

+0

哦。那是罪魁禍首嗎?或者我應該將'var num'聲明爲一個數組? – cholo

回答

3

在我看來,你需要在這個函數之外創建你的列表,並在另一個函數中添加/刪除表單。數字的點擊方法

  • 對於集合中只有唯一的數字之外

    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. 
    
  • +0

    如何檢查列表是否已包含已添加的號碼?如果是這樣,那麼它不會添加它。 – cholo

    +1

    調用ListNumbers.Contains(「value」)方法在添加之前首先檢查。 – Valuator

    +1

    謝謝:)它的工作原理。 – cholo

    0
    1. 實例化集合使用 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

    +0

    謝謝你的幫助:) '不要使用異步無效函數 - 因爲所有可能的異常將被「吞下」。但是,對於事件處理程序使用異步無效是可以的。「 您可以進一步解釋嗎? – cholo

    +0

    從那裏:[https://blog.stephencleary.com/2012/02/async-and-await.html](https://blog.stephencleary.com/2012/02/async-and-await.html) ,檢查關於「退貨類型」的段落 – Fabio

    相關問題