У меня есть работающий сборщик, если я вручную устанавливаю элементы в цикле, используя строки. И я получаю OnChange и получаю строковое значение с помощью Picker.Items[picker.SelectedIndex]
У меня есть эти объекты.
<Picker x:Name = "Event"
Title = "Select an Event"
SelectedIndexChanged = "OnEventIndexChanged">
</Picker>
public class Location
{
public string LocationID { get; set; }
public string LocationName { get; set; }
}
У меня это работает.
List<Location> L3 = DB.Table<Location>().ToList();
foreach (var L in L3)
Event.Items.Add(L.LocationName);
Что мне нужно сделать, так это заставить сборщика использовать объекты List of Location, чтобы:
В документации для Picker говорится, что вы можете установить его в IList, но я не знаю, как преобразовать из Список К IList
Я не использую MVC. Пожалуйста, не приводите примеры, в которых каким-либо образом используется MVC.
«но я не знаю, как преобразовать список в IList». Список — это IList, конвертировать нечего.
Я полагаю, что использую MVC, поскольку в моем приложении есть файл «View» XAML. Но я не использую какие-либо функции модели/представления для заполнения или обработки элементов управления. Я делаю все на C#. Это сложное приложение работает нормально, мне просто нужно знать, как использовать => прямой C# для заполнения средства выбора из списка объектов и возврата элемента из объекта =>, который не является элементом, отображаемым в средстве выбора. Точно так же, как при выборе html, у вас есть элементы DISPLAY и элементы DATA IN THE html. Также «Список — это IList, конвертировать нечего». Понятно, поскольку это работает! Event.ItemsSource = L3;
Вы можете добиться вышеизложенного, используя решение, описанное здесь.
Для справки обратитесь к коду, показанному ниже:
using System.Collections.Generic;
using System.Linq;
using Microsoft.Maui.Controls;
public class Location // Class to hold location data
{
public string LocationID { get; set; }
public string LocationName { get; set; }
}
public partial class MainPage : ContentPage
{
public List<Location> Locations { get; set; }
public MainPage()
{
InitializeComponent();
LoadLocations();
PopulatePicker();
}
private void LoadLocations()
{
Locations = new List<Location> // Sample data
{
new Location { LocationID = "1", LocationName = "Location A" },
new Location { LocationID = "2", LocationName = "Location B" },
new Location { LocationID = "3", LocationName = "Location C" }
};
}
private void PopulatePicker()
{
foreach (var location in Locations)
{
EventPicker.Items.Add(location.LocationName);
}
}
private void OnEventIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
var selectedLocation = Locations[selectedIndex];
string locationID = selectedLocation.LocationID;
DisplayAlert("Selected Location", $"ID: {locationID}, Name: {selectedLocation.LocationName}", "OK");
}
}
}
В шаблоне используйте выше, как показано ниже:
<?xml version = "1.0" encoding = "utf-8" ?>
<ContentPage xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
x:Class = "YourNamespace.MainPage">
<StackLayout>
<Picker x:Name = "EventPicker"
Title = "Select an Event"
SelectedIndexChanged = "OnEventIndexChanged"/>
</StackLayout>
</ContentPage>
Предупреждение об опечатке — это достижение, а не «архив» (в этом слове нет буквы «r»)
Ах да, спасибо за редактирование @marc_s.. :-)
Одним из требований было получить LocationID - из данных сборщика, а не из списка местоположений, который является локальной переменной и удаляется после настройки сборщика, но спасибо за попытку помочь...
сделай это
Event.ItemsSource = L3;
Event.ItemDisplayBinding = new Binding("LocationName");
чтобы получить выбранный идентификатор в SelectedIndexChanged
var event = (Event)Event.ItemsSource[Event.SelectedIndex];
var id = event.EventNumber;
Это работает! Но мне нужно получить LocationID из средства выбора, а не LocationName и список объектов L3, которые он удалил после заполнения средства выбора, поэтому я не могу использовать SelectedIndex для получения LocationID из L3 в OnChange. Есть ли вызов, сообщающий сборщику, какие элементы следует вернуть из объекта? Что-то вроде Event.ItemDATABinding = new Binding("LocationID"); ? На самом деле все, что я пытаюсь сделать, это использовать средство выбора, такое как html select....
Что вы можете. Просто сохраните ссылку на L3
и используйте L3[Event.SelectedIndex].LocationID;
. Или вы можете использовать Event.ItemsSource
вместо L3
, но сначала вам нужно будет привести его к правильному типу.
Я не могу использовать L3 в OnChange(). Это список объектов, который существует только для заполнения средства выбора, а затем удаляется. Можете ли вы привести пример того, как я буду использовать Event.ItemSource для получения LocationID? Я понятия не имею, как его использовать или передать в Location.LocationID..... tx
опять же, нет причин, по которым вы не могли бы сохранить ссылку L3
. Но посмотрите мое последнее редактирование
Потратив некоторое время в отладчике на просмотр того, что доступно из средства выбора в OnChange(), я наконец понял это с вашей помощью! СПАСИБО! void OnEventIndexChanged (отправитель объекта, EventArgs e) { Location SelectedLocation = (Location) Picker.ItemsSource [picker.SelectedIndex]; Log.Text += SelectedLocation.LocationID; }
Если вы не используете MVC, что вы используете?