我以为我已经解决了这个问题,但它似乎不再工作了。我有一个像这样的选择器:
<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
是否为空
if (picker.SelectedItem == null)
并向用户显示一条消息,或者任何适合您的用例的消息