我有一个代码扫描程序,扫描后,它返回一个字符串值。然后我将此字符串值添加到可观察的集合中。
触发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 :(得分:0)
此时,您已将集合的新实例设置为_codes
,但未提出属性更改通知。因此Picker
控件仍然在侦听集合更改事件的旧实例。为了解决这个问题,请务必使用:
public async void ScanCode()
{
Codes = new ObservableCollection<string>();
...
或者,
public async void ScanCode()
{
_codes = new ObservableCollection<string>();
OnPropertyChanged(nameof(Codes));
...