2017-10-12 98 views
0

我有一个代码扫描器,扫描后,它返回一个字符串值。然后我将这个字符串值添加到可观察集合中。结果没有出现在选择器Xamarin.Forms

当触发ScanCode()方法时,摄像机打开并扫描代码,然后将值添加到列表中。然后它回到页面,但选择器保持空白。请帮助解决问题。

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

然后,我已经定义了选择器如下:

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

回答

0

在这一点上,因为你已经设置集合的新实例_codes但没有提出财产更改通知。因此,Picker控件仍在侦听收集已更改事件的旧实例。为了解决这个问题,一定要使用:

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

或者,

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