В настоящее время я создаю приложение для IOS и Android с Xamarin.Forms, которое принимает резервирование и помещает информацию о резервировании в базу данных SQLite, которая затем заполняется в ListView для администратора, чтобы удалить или принять резервирование.База данных работает нормально, но я получаю сообщение об ошибке «Указанное преобразование недействительно» при попытке просмотреть страницу администратора с ListView резервирования.Код ниже:
Я пытался исследовать проблему, и я думаю, что это связано с кодом в XAML и контекстом привязки, но я не уверен, что делать, чтобы это исправить.
MyPage.XAML
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Assignment6.MyPage">
<ContentPage.Content>
<StackLayout>
<ListView x:Name = "ListviewItems" />
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout>
<Label Text = "{Binding date}" />
<Label Text = "{Binding meetingLocation}" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</StackLayout>
</ContentPage.Content>
</ContentPage>
MyPage.XAML.CS
namespace Assignment6
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MyPage : ContentPage
{
private ObservableCollection<Reservation> items = new ObservableCollection<Reservation>();
public MyPage()
{
InitializeComponent();
Init();
}
public void Init()
{
BindingContext = new Reservation();
var enumerator = App.UserDatabase.GetReservation();
while (enumerator.MoveNext())
{
items.Add(enumerator.Current);
}
ListviewItems.ItemsSource = items;
}
}
}
Reservation.CS
public class Reservation
{
[PrimaryKey][AutoIncrement]
public int date { get; set; }
public int startingTime { get; set; }
public string duration { get; set; }
public int meetingLocation { get; set; }
public Reservation()
{
}
public Reservation(int date, int startingTime, string duration, int meetingLocation)
{
this.date = date;
this.startingTime = startingTime;
this.duration = duration;
this.meetingLocation = meetingLocation;
}
}
Метод из MainPage.XAML.CS, которая добавляет резервирование из средства выбора даты, выбора времени, ползунка и выпадающего меню.
void Handle_Clicked(object sender, System.EventArgs e)
{
DisplayAlert("Reservation", "Your reservation for a " + Output.Text + " meeting in room " + Room.SelectedIndex +
" starting at " + Time.Time + " on " + Date.Date.Month + "/" + Date.Date.Day + "/" + " " + Date.Date.Year + " for " + Slide.Value.ToString() + " hours has been added.", "OK");
Reservation reserve = new Reservation(Date.Date.Month, Time.Time.Hours, Slide.Value.ToString(), Room.SelectedIndex);
App.UserDatabase.SaveReservation(reserve);
}
Метод GetReservation:
public IEnumerator<Reservation> GetReservation()
{
lock (locker)
{
if (database.Table<Reservation>().Count() == 0)
{
return null;
}
else
{
return database.Table<Reservation>().GetEnumerator();
}
}
}
Метод нажатия кнопки MainPage, который приводит пользователя к администраторустраница со списком:
async void Handle_Clicked_1(object sender, System.EventArgs e)
{
await Navigation.PushAsync(new MyPage());
}
Когда я запускаю программу, я получаю следующую ошибку «System.InvalidCastException», указанное преобразование недопустимо.Ниже StackTrace:
System.InvalidCastException: Specified cast is not valid.
at Xamarin.Forms.ItemsView`1+<>c[TVisual].<.cctor>b__24_0 (Xamarin.Forms.BindableObject b, System.Object v) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\ItemsView.cs:25
at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes) [0x00071] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:387
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, System.Boolean fromStyle, System.Boolean checkAccess) [0x0003d] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:573
at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:99
at Assignment6.MyPage.InitializeComponent () [0x00023] in /Users/zane/Projects/Assignment6/Assignment6/obj/Debug/netstandard2.0/MyPage.xaml.g.cs:26
at Assignment6.MyPage..ctor () [0x00013] in /Users/zane/Projects/Assignment6/Assignment6/MyPage.xaml.cs:16
at Assignment6.MainPage+<Handle_Clicked_1>d__2.MoveNext () [0x0000f] in /Users/zane/Projects/Assignment6/Assignment6/MainPage.xaml.cs:33
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.13/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1023
at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.13/src/Xamarin.iOS/Foundation/NSAction.cs:178
at at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.13/src/Xamarin.iOS/UIKit/UIApplication.cs:79
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0002c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.13/src/Xamarin.iOS/UIKit/UIApplication.cs:63
at Assignment6.iOS.Application.Main (System.String[] args) [0x00001] in /Users/zane/Projects/Assignment6/Assignment6.iOS/Main.cs:17
Любая помощь с этим будет принята с благодарностью!Я пытался отладить это некоторое время, но я не могу понять, в чем проблема.