Xamarin.Forms: отображать значение поля из базы данных sqlite в средстве выбора - PullRequest
0 голосов
/ 27 апреля 2020

введите описание изображения здесь Мое приложение Xamarin.Forms хранит данные в базе данных sqlite. В этой базе данных у меня есть таблица Article, определенная следующим образом:

public class Article
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public string Name { get; set; }
    public string NomCat { get; set; }
    public string UniteMesure { get; set; }
    public string Note { get; set; }
    public byte[] ImageArt { get; set; }
}

Когда пользователь изменяет статью, я отображаю различные поля, чтобы пользователь мог их изменить. Есть 2 поля (NomCat и Unitemesure), которые вводятся в средство выбора во время создания. Мне бы хотелось, чтобы при открытии страницы для изменения статьи средство выбора отображало значение, содержащееся в таблице. В настоящее время поле ввода средства выбора пусто, а все остальные поля отображаются правильно с привязкой. Если я определю Picker.ItemsSource в коде xaml с массивом, будет показано значение поля:

<Picker x:Name="pickerCat"
                    Title="choisissez une catégorie"
                    SelectedItem="{Binding NomCat}">
                <Picker.ItemsSource>
                    <x:Array Type="{x:Type x:String}">
                        <x:String>Fruits</x:String>
                        <x:String>Légumes</x:String>
                        <x:String>Crèmerie</x:String>
                        <x:String>Charcuterie</x:String>
                    </x:Array>
                </Picker.ItemsSource>
            </Picker>

Если таблица определена в приведенном коде, ничего не отображается:

        List<string> pkListCat = new List<string>();
        foreach (var item in DB_CategorieList_Sorted)
        {
            string element = item.NomCat;
            pkListCat.Add(element);
        }
        pickerListCat = pkListCat.ToArray();
        pickerCat.ItemsSource = pickerListCat;

Я долго искал, но ничего не нашел. Я сделал ошибку или это проблема с xamarin.forms? Спасибо всем, кто может мне помочь.

1 Ответ

0 голосов
/ 02 мая 2020

Возможно, я допустил ошибку в BindingContext, но нашел способ обойти эту проблему. Я удалил привязку в коде xaml:

<Picker x:Name="pickerCat" SelectedIndexChanged="pickerCat_SelectedIndexChanged">

И добавил в код несколько строк:

if (_article.NomCat == null)
        {
            pickerCat.Title = "choisissez une catégorie";
            pickerCat.TitleColor = Color.Gray;
        }
else
        {
            pickerCat.Title = _article.NomCat;
            pickerCat.TitleColor = Color.Black;
        }
string[] pickerListCat;
List<string> pkListCat = new List<string>();
foreach (var item in DB_CategorieList_Sorted)
       {
           string element = item.NomCat;
           pkListCat.Add(element);
       }
pickerListCat = pkListCat.ToArray();
pickerCat.ItemsSource = pickerListCat;

private void pickerCat_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selectedItem = (string)pickerCat.SelectedItem;
        if (_article != null)
            _article.NomCat = selectedItem;
    }

Теперь это работает очень хорошо: значение поля равно отображается в сборщике после прочтения элемента в таблице.

...