【问题标题】:Xamarin.Forms : display value of a field from a sqlite database in a pickerXamarin.Forms:在选取器中显示来自 sqlite 数据库的字段值
【发布时间】:2020-08-11 06:35:12
【问题描述】:

enter image description hereMy 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)。 我希望当页面打开以修改文章时,选择器显示表中包含的值。目前,选择器输入字段为空,而所有其他字段都通过绑定正确显示。 如果我在 xaml 代码中用数组定义 Picker.ItemsSource,则显示该字段的值:

<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 有问题?感谢任何可以帮助我的人。

【问题讨论】:

  • 请确保pkListCat 有数据。我用的是静态数据,我用你的方式,它显示正确。这是运行截图。 imgur.com/a/bi0TtwN
  • 感谢您的回复,但问题不是填写列表(没关系),而是在选择器中显示打开页面时保存的字段内容。这适用于 xaml 代码中定义的数组,但不适用于后面代码中定义的数组。
  • 您没有在后台代码中设置mypicker.SelectedItem = "xxx";
  • 我已经试过了:不管定义与否,都不会改变任何东西。页面打开时,选择器中不显示值 NomCat。最令人不安的是,如果用户在没有重新填充选择器的情况下验证页面,则选择器的字段在数据库中为空。
  • 第一次插入模型时,如果用户在没有重新填充选择器的情况下验证页面,您可以在数据库中插入默认值

标签: android xamarin.forms data-binding picker


【解决方案1】:

我可能在 BindingContext 中犯了一个错误,但我找到了解决问题的方法。我删除了 xaml 代码中的 Binding:

<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;
    }

现在效果很好:读取表格中的元素后,字段的值显示在选择器中。

【讨论】:

  • 感谢您的分享,请不要标记此答案,它将帮助其他有类似问题的人。
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 2015-04-11
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多