选择选取器项时显示表信息



我还是初学者,所以请耐心等待。

我正在尝试根据选取器的选定项更改显示的信息(在操作表和其他页面上(。选取器中的每个项都引用表上的一列,并具有自己的行 ID(设置为自动增量(。 我能够保存(并根据需要显示(当前的 SelectedItem,但只能保存为该项目名称,而没有与该行关联的任何其他内容(我知道(。

我应该能够使用选取器的绑定属性来执行此操作,但它不想工作。 我觉得我错过了一些愚蠢的东西。

萨姆.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()); ;

}

哈姆勒

<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等,它可以工作(ish(,但只会显示默认值是什么,而不管选择器选择项如何。如果我将 DisplayActionSheet 更改为PickerItem.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}"/>

选取器上有一个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());
}

最新更新