xamarin - 选择选择器项目时显示表格信息
问题描述
我仍然是初学者,所以请耐心等待。
我正在尝试根据选择器的 selectedItem 更改显示的信息(在 ActionSheet 和其他页面上)。选择器中的每个项目都引用表上的一列,并且有自己的行 ID(设置为 autoIncrement)。我能够保存(并根据需要显示)当前的 SelectedItem,但只能作为该项目的名称,而不是与该行相关的任何其他内容(我知道)。
我应该能够使用选择器的绑定属性来执行此操作,但它不想工作。我觉得我错过了一些愚蠢的东西。
Xaml.cs
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
var terms = conn.Table<Terms>().ToList().FirstOrDefault();//Lets me access the columns on the table
var pickerItem = termPicker.Items[termPicker.SelectedIndex]; //Lets me save and use the TermName
DisplayActionSheet(PickerItem.TermName, "Ok", null, "Term Status: " + PickerItem.TermStatus,
"Projected Start: " + PickerItem.TProjStart.ToString(),
"Projected End: " + PickerItem.TProjEnd.ToString(),
"Actual Start: " + PickerItem.TActStart.ToString(),
"Actual End : " + PickerItem.TActEnd.ToString()); ;
}
Xaml
<Picker x:Name="termPicker"
ItemsSource="{Binding Terms}"
ItemDisplayBinding="{Binding TermName}"
Title="Select a term"
IsEnabled="True"
SelectedItem="{Binding PickerItem}"/>
桌子
public class Terms
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string TermName { get; set; }
public string TermStatus { get; set; }
public DateTime TProjStart { get; set; }
public DateTime TProjEnd { get; set; }
public DateTime TActStart { get; set; }
public DateTime TActEnd { get; set; }
public Object PickerItem { get; set; }
如果我term.TermName
在 DisplayActionSheet 中使用 etc.,它可以工作(ish),但只会显示默认值,无论 Picker SelectedItem 是什么。如果我将 DisplayActionSheet 更改为PickerItem.TermName
etc.,则会出现错误“对象不包含 TermName 的定义”。
我知道 SelectedItem 是一个对象,但我不确定如何设置该对象以引用术语表或 SelectedItem 所关联的行。
任何帮助将不胜感激。谢谢!
编辑:添加最新和工作代码:
public class Terms
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string TermName { get; set; }
public string TermStatus { get; set; }
public DateTime TProjStart { get; set; }
public DateTime TProjEnd { get; set; }
public DateTime TActStart { get; set; }
public DateTime TActEnd { get; set; }
出现
protected override void OnAppearing()
{
base.OnAppearing();
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
conn.CreateTable<Terms>();
conn.CreateTable<Courses>();
conn.CreateTable<Assessments>();
var terms = conn.Table<Terms>().ToList();
var courses = conn.Table<Courses>().ToList();
var assessments = conn.Table<Assessments>().ToList();
termPicker.ItemsSource = terms;
var dateNow = DateTime.Now;
if (!terms.Any())
{
conn.Insert(new Terms
{
TermName = "Demo Term",
TermStatus = "In Progress",
TProjStart = dateNow,
TProjEnd = dateNow,
TActStart = dateNow,
TActEnd = dateNow
});
}
事件处理程序
void InfoClicked(Object sender, EventArgs e)
{
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
var terms = conn.Table<Terms>().ToList().FirstOrDefault();
var pickerItem = termPicker.Items[termPicker.SelectedIndex];
DisplayActionSheet(pickerItem, "Ok", null, "Term Status: " + terms.TermStatus,
"Projected Start: " + terms.TProjStart.ToString(),
"Projected End: " + terms.TProjEnd.ToString(),
"Actual Start: " + terms.TActStart.ToString(),
"Actual End : " + terms.TActEnd.ToString());
}
}
选择器绑定
<StackLayout>
<Picker x:Name="termPicker"
ItemsSource="{Binding Terms}"
ItemDisplayBinding="{Binding TermName}"
Title="Select a term"
IsEnabled="True"
SelectedItem="{Binding pickerItem}"/>
解决方案
Picker 上有一个SelectedItem
属性,您需要做的就是将其转换为正确的类型。然后,您可以访问所有单独的属性term
void InfoClicked(Object sender, EventArgs e)
{
var term = (Terms)termPicker.SelectedItem;
DisplayActionSheet(term.TermName, "Ok", null, "Term Status: " + term.TermStatus,
"Projected Start: " + term.TProjStart.ToString(),
"Projected End: " + term.TProjEnd.ToString(),
"Actual Start: " + term.TActStart.ToString(),
"Actual End : " + term.TActEnd.ToString());
}
推荐阅读
- javascript - setState 未在 useEffect 中更新
- ios - 在 iphone11 Pro Max 上运行 pod install 错误启动应用程序时出错
- css - 如何通过 @media 使用内联样式 CSS
- php - 无法使用 PDO SQLSRV 将数据插入 SQL db
- flutter - 对移动和 Web 应用程序使用相同的渠道
- python - 查找给定字符串中所有可能的子序列
- java - catch 块中的 throw 语句如何防止未初始化变量的编译器错误?
- javascript - 标签名称属性未使用 Vue 定义,但可在浏览器中访问
- css - 如何将 CSS 工具提示应用于表格整行?
- amazon-web-services - 如何在 AWS CloudWatch 日志组中删除订阅