我有xamarin应用程序,它的顶部有一个选择器,在it.When下面有一个列表视图,该应用程序启动后,在根据选择器值执行另一个API调用并加载列表视图之后,该应用程序上的数据将从web API.Then绑定。当用户更改选择器的值时,应该更新listview,我没有使用任何视图模型,我有一个API调用的助手类,我正在将json结果设置为一个列表,并将它设置为我的Listview的项目源。我以某种方式实现了它,但它并不顺利,有时当我更改picker.NB的值时,它会以“”的形式获得错误:我使用的是带有Rg.popup.Plugin的自定义选择器。它将选定的值设置为标签。
我的问题是
My xamal.cs NB:APICall类将以正确的格式返回json。
public partial class List : ContentPage
{
string weekstart;
string WeekString;
ObservableCollection<PickerData> resultObjcallForPicker = new ObservableCollection<PickerData>();
public TimeSheetList()
{
InitializeComponent();
Thread loadScreenItemsThread = new Thread(new ThreadStart(LoadScreenItemsAsync));
loadScreenItemsThread.Start();
}
public async void LoadScreenItemsAsync()
{
//Picker Data loading
string postdataForPicker = "{\"Username\":\"" + Settings.userID + "\",\"ConnectionString\":\"" + Settings.String+ "\"}";
APICall callForPicker = new APICall("/API/ListMobile/PickerData", postdataForPicker, loadingIndicator);
try
{
resultObjcallForPicker = callForPicker.APICallResult<ObservableCollection<PickerData>>();
if (resultObjcallForPicker != null)
{
WeekString = DateTime.Parse(resultObjcallForPicker[0].SDate).ToString("dd-MMM-yyyy");
Device.BeginInvokeOnMainThread(async () =>
{
// Setting the value of picker initially.
WeekStart.Text = WeekString;
});
await loadList();
}
else
{
Device.BeginInvokeOnMainThread(async () =>
{
UserDialogs.Instance.HideLoading();
await DisplayAlert("", "error occured", "OK");
});
}
}
catch (Exception)
{
Device.BeginInvokeOnMainThread(async () =>
{
UserDialogs.Instance.HideLoading();
ErrorMessageData errorMessage = new ErrorMessageData();
errorMessage.Flag = false; errorMessage.Message = callForPicker.errorMessage.Message;
});
}
}
//<<----------------Loading Listview----------------------->>
public async Task loadList()
{
string postdataForList = "{\"date\":\"" + WeekStart.Text + "\"}";
APICall callForList = new APICall("/API/ListMobile/ListForApproval", postdataForList, loadingIndicator);
try
{
List<ListData> resultObjForListst = callForList.APICallResult<List<ListData>>();
if (resultObjForListst != null)
{
List.ItemsSource = resultObjForListst;
screenStackLayout.VerticalOptions = LayoutOptions.FillAndExpand;
List.IsVisible = true;
}
else
{
Device.BeginInvokeOnMainThread(async () =>
{
await DisplayAlert("", "Please check network connection", "OK");
});
}
}
catch (Exception)
{
Device.BeginInvokeOnMainThread(async () =>
{
ErrorMessageData errorMessage = new ErrorMessageData();
errorMessage.Flag = false; errorMessage.Message = callForList.errorMessage.Message;
});
}
}
void Picker_tapped(object sender,EventArgs e)
{
PopupNavigation.PushAsync(new WeekStartPopUp(WeekStartList));
MessagingCenter.Subscribe<MyMessage>(this, "WeekStartData", (value) =>
{
string receivedData = value.Myvalue;
WeekStart.Text = receivedData;
Device.BeginInvokeOnMainThread(async () =>
{
try {
loadList();
}
catch(Exception Ex)
{
}
});
});
}
}任何帮助都是appreciated.Please,如果需要其他信息,请告诉我。
发布于 2019-06-24 09:53:33
First
对于错误:sometimes gets Error as "Outof memmory exception",您需要一次获取所有数据吗?如果没有,您可以只获取所需的数据并更新页面dynamically.For示例,您可以使用分页来请求和显示数据。
此外,如果您确定您有足够的空闲内存,运行64位操作系统,并且仍然有异常,请转到Project properties -> Build选项卡,并确保将x64设置为平台target.just,如下所示:

第二
由于您的应用程序将包含更大的数据,我们强烈建议您使用MVVM模式。
因为MVVM模式有助于将应用程序的业务和表示逻辑与其UI清晰地分离开来。它还可以极大地改善代码重用的机会,并允许我们和UI设计人员在开发应用程序的各个部分时更容易地进行协作。
https://stackoverflow.com/questions/56718168
复制相似问题