Я все еще новичок, поэтому терпите меня.
Я пытаюсь изменить отображаемую информацию (в ActionSheet и на других страницах) в зависимости от выбранного элемента средства выбора. Каждый элемент в средстве выбора ссылается на столбец в таблице и имеет собственный идентификатор строки (установлен в 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
и c. в DisplayActionSheet он работает (i sh), но отображает только значения по умолчанию, независимо от выбранного элемента выбора. Если я изменю DisplayActionSheet на PickerItem.TermName
et c., Он выдаст ошибку «объект не содержит определения для 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; }
OnAppearing
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}"/>