簡體   English   中英

Xamarin.Forms:使用 Picker 時錯誤指定的強制轉換無效

[英]Xamarin.Forms: Error Specified cast is not valid when using Picker

我以為我已經解決了這個問題,但它似乎不再起作用了。 我有一個看起來像這樣的選擇器:

                        <StackLayout Padding="15">
                            <Label Text="Choose a Victory"
                                   FontSize="Subtitle"
                                   FontAttributes="Bold"
                                   TextColor="{StaticResource TitleFontColour}"
                                   FontFamily="{StaticResource MontSerrat}"/>
                            <Picker x:Name="quickPicker" 
                                    Title="- Select -"
                                    TitleColor="White"
                                    HorizontalOptions="FillAndExpand"
                                    TextColor="#8759D7"
                                    FontFamily="{StaticResource MontSerrat}"
                                    ItemDisplayBinding="{Binding Desc}"
                                    SelectedItem="{Binding SelectedDesc}">
                            </Picker>
                        </StackLayout>

選擇器基於:

        public Task<List<QuickVictories>> GetQuickVictoriesAsync()
        {
            return _database.Table<QuickVictories>().OrderByDescending(x => x.DisplaySeq).ToListAsync();
        }

我的模型是:

主模型.cs

    public class QuickVictories
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        [MaxLength (140)]
        public string Desc { get; set; }
        [AutoIncrement]
        public int DisplaySeq { get; set; }
    }

我對 AddVictory.xaml.cs 背后的看法

protected override async void OnAppearing()
        {
            base.OnAppearing();

            quickPicker.ItemsSource = await App.Database.GetQuickVictoriesAsync();
        }

        async void OnSaveButtonClicked(object sender, EventArgs e)
        {

            var selectedQuickVictory = quickPicker.SelectedItem as QuickVictories;
            var quickVictory = selectedQuickVictory.Desc;

            var victory = new TheVictory()
            {
                Title = title.Text ?? quickVictory ?? "No title",
                Quick = quickVictory ?? "N/A",
                Details = details.Text ?? "No details were entered.",
                Date = DateTime.UtcNow
            };

            await App.Database.SaveVictoryAsync(victory);

            await DisplayAlert(
                "You have just celebrated a Victory!",
                "Your Victory has been saved for future celebrations.",
                "Woohoo!"
            );

            await Navigation.PopAsync();
        }

每當我嘗試使用 OnSaveButtonClicked 進行保存時,我都會在此行上特別收到錯誤消息: var quickVictory = selectedQuickVictory.Desc;

這種方法目前正在我在 Google Play 商店中運行的應用程序的生產版本上運行,所以我很困惑為什么這不再起作用了。

有沒有人知道我可以在哪里嘗試解決這個問題,因為我沒有想法。

明確地說,目標是我從 QuickVictories 模型中獲得 Desc。 我曾嘗試將對象轉換為字符串,但自從移動到選擇器是 sqlite 查詢的返回后,它似乎不起作用。

編輯:

上傳 SelectedItem 調試的圖片。

SelectedItem 調試菜單

您需要檢查SelectedItem是否為空

if (picker.SelectedItem == null)

並向用戶顯示一條消息,或任何適合您的用例的消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM