У меня есть список с несколькими шаблонами данных. Одним из шаблонов является простое текстовое поле и кнопка для сканирования штрих-кода (ZXingLibrary). Страница со списком отображается модально. На странице отображается вопрос со списком ответов, привязанных к представлению списка. Шаблон типа штрих-кода является одним из таких ответов.
Я обновляю коллекцию наблюдаемых диапазонов, привязанную к представлению списка в следующем коде. Эта функция вызывается после успешного сканирования штрих-кода.
private void UpdateUserResponseList(UserResponse obs, string result)
{
var temp = obs;
obs.RValue = result;
ObsList.Remove(temp);
ObsList.Add(obs);
}
Когда пользовательский интерфейс обновляет индексы списка, изменяется на обеих платформах. Это прекрасно работает в iOS. Но в Android пользовательский интерфейс обновляется только тогда, когда счетчик ObsList больше 1. Он сохраняет значение в коллекции, но не отображается / не обновляется в текстовом поле.
ListView
<ListView x:Name="ObsListView" IsVisible="{Binding IsObservations}" CachingStrategy="RecycleElement" Margin="20" ItemsSource="{Binding ObsList}" SeparatorVisibility="None" HasUnevenRows="true" BackgroundColor="Transparent"
ItemTemplate="{StaticResource ObservationDataEntrySelector}" />
ObservableRangeCollection
public ObservableRangeCollection<UserResponse> ObsList
{
get
{ return _obsList; }
set
{
if (_obsList != value)
{
_obsList = value;
OnPropertyChanged("ObsList"); } }
}
}
Функция вызывается, когда пользователь нажимает Сканирование штрих-кода * Кнопка 1020 *
private void BarcodeScannerExecuted(UserResponse obj)
{
ZXingScannerPage scanPage = new ZXingScannerPage();
var customOverlay = new StackLayout
{
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand
};
var Cancel_Button = new Button
{
Text = "Cancel",
Command = CancelScanningCommand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
};
var Text_shown = new Label
{
Text = "Hold your device up to the barcode,Scanning will happen automatically",
TextColor = Xamarin.Forms.Color.DarkRed,
HorizontalOptions = LayoutOptions.CenterAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand
};
customOverlay.Children.Add(Cancel_Button);
customOverlay.Children.Add(Text_shown);
scanPage = new ZXingScannerPage(customOverlay: customOverlay);
scanPage.OnScanResult += (result) =>
{
scanPage.IsScanning = false;
Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
{
UpdateUserResponseList(obj, result.Text);
await _navigation.NavigatePopModalAsync();
});
};
_navigation.NavigatePushModalAsync(scanPage);
}