2017-10-12 138 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)); 
...