2017-10-12 1 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

    관련 문제