2017-10-12 9 views
0

J'ai un scanner de code qui, après analyse, me renvoie une valeur de chaîne. Ensuite, j'ajoute cette valeur de chaîne à une collection observable. Lorsque la méthode ScanCode() est déclenchée, la caméra s'ouvre et scanne un code puis ajoute la valeur à la liste. Ensuite, il revient à la page, mais le sélecteur reste vide. Veuillez aider à comprendre le problème.Les résultats n'apparaissent pas dans le sélecteur Xamarin.Forms

private ObservableCollection<string> _codes; 
public ObservableCollection<string> Codes 
{ 
    get { return _codes; } 
    set 
    { 
     _codes = value; 
     OnPropertyChanged(); 
    } 
} 


public async void ScanCode() 
{ 

    codes= new ObservableCollection<string>(); 

    var cd = await CodeScanViewModel.CodePage1(); // returns the code in string 

    if (cd != null) 
    { 

     _codes.Add(cd.ToString());    
    } 
} 

Puis dans mon XAML, j'ai défini le sélecteur comme suit:

  <Picker 
       Title="Codes" 
       ItemsSource="{Binding Codes}" 
       VerticalOptions="Center" /> 

Répondre

0

À ce stade, que vous avez défini une nouvelle instance de collection _codes mais n'a pas soulevé la propriété -changement de notification. Le contrôle Picker continue donc d'écouter l'ancienne instance pour les événements modifiés par la collection. Pour résoudre ce problème, assurez-vous d'utiliser:

public async void ScanCode() 
{ 
    Codes = new ObservableCollection<string>(); 
... 

Ou,

public async void ScanCode() 
{ 
    _codes = new ObservableCollection<string>(); 
    OnPropertyChanged(nameof(Codes)); 
...