Xamarin Listview 仅添加 1 项我的列表中有 2 项
Posted
技术标签:
【中文标题】Xamarin Listview 仅添加 1 项我的列表中有 2 项【英文标题】:Xamarin Listview only adding 1 item my List has 2 items on it 【发布时间】:2021-12-19 19:20:21 【问题描述】:我有一个 listview 和一个通过 Bluethoot 连接将项目获取到 Radio 设备的方法,当方法结束时,我的 itemsList 中有两个项目,但我的 ListView 上只显示一个,该项目在我之前不可见出于某种原因点击屏幕。
关于如何在 ListView 中同时显示我的两个项目有任何帮助吗?
我认为这与我处理 EventRead 和 EventStopped 的方式有关,也许它没有时间更新
public partial class ReadAnyPage : ContentPage
IRadioPlatform _platform;
DropdownTypes dropdownTypes;
Task<List<ChoiceConnectEndpoint>> _readAnyComplete;
public event EventHandler OnStopped;
public event EventHandler<Itron.Mobile.Radio.Communication.SRead.HandledEventArgs<ChoiceConnectEndpoint>> readEndpoints;
private List<JsonDict> itemsList = new List<JsonDict>();
string bleName, blePort;
public ReadAnyPage()
InitializeComponent();
BindingContext = this; //Added this
_platform = DependencyService.Get<IRadioPlatform>();
dropdownTypes = new DropdownTypes();
bleName = Preferences.Get("ble_name", "");
blePort = Preferences.Get("ble_port", "");
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
listView.ItemsSource = itemsList;
ReadAnyNear(tokenSource, token);
private void ReadAnyNear(CancellationTokenSource tokenSource, CancellationToken token)
var loading = UserDialogs.Instance.Loading("Reading Endpoints...", onCancel: tokenSource.Cancel, "\n\n" + Resx.Resources.Cancel, true, MaskType.Black);
try
// Set new IMR
IMRRadioservice imrRadioService = new IMRRadioService(_platform);
imrRadioService.Name = bleName;
imrRadioService.Port = blePort;string
readEndpoints += EventRead;
OnStopped += EventStopped;
_readAnyComplete = imrRadioService.ReadAny(token, readEndpoints, OnStopped);
catch (Exception ex)
DisplayAlert("Error", dropdownTypes.OnConvertErrorEX(ex.Message), "ok", "cancel");
loading.Hide();
private void EventRead(object sender, EventArgs e)
Console.WriteLine("READ READ");
try
Itron.Mobile.Radio.Communication.SRead.HandledEventArgs<ChoiceConnectEndpoint> item = (Itron.Mobile.Radio.Communication.SRead.HandledEventArgs<ChoiceConnectEndpoint>)e;
JsonDict jsonDict = new JsonDict();
jsonDict.RadioNumber = item.Data.EndpointId.ToString();
jsonDict.MeterType = item.Data.MarketType.ToString();
jsonDict.Read = ((Endpoint100G)item.Data).Reading.Read.ToString();
jsonDict.ModuleType = item.Data.EndpointTypeName;
jsonDict.ServiceType = item.Data.MarketType.ToString();
itemsList.Add(jsonDict);
Console.WriteLine("Count:" + itemsList.Count);
listView.ItemsSource = itemsList;
catch (Exception ex)
Console.WriteLine("Error:" + ex.Message);
private void EventStopped(object sender, EventArgs e)
Console.WriteLine("STOPPED");
private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
private void ListView_Refreshing(object sender, EventArgs e)
OnRefreshDevicesList();
private void OnRefreshDevicesList()
listView.EndRefresh();
【问题讨论】:
itemsList
应该是 ObservableCollection<T>
,而不是 List<T>
并且不要重新分配ItemsSource
感谢@Jason 做到了,如此简单但我看不到它
【参考方案1】:
感谢@Jason 从这里解决
private List<JsonDict> itemsList = new List<JsonDict>();
到这里
private ObservableCollection<JsonDict> itemsList = new ObservableCollection<JsonDict>();
【讨论】:
考虑将其标记为答案,因为它对其他人有帮助。以上是关于Xamarin Listview 仅添加 1 项我的列表中有 2 项的主要内容,如果未能解决你的问题,请参考以下文章
使用 LinearLayout 向 ListView 添加标题,Listview 被推离屏幕(Xamarin Android)
在运行时将带有绑定的控件添加到 Xamarin ListView?
用于 Xamarin.Forms 的带有标头 (LongListSelector) 的 ListView