Сохранение и чтение значений Picker из SQLite - Xamarin.Forms - PullRequest
0 голосов
/ 11 июля 2019

Я бы хотел, чтобы вы помогли мне решить проблему, с которой я не могу справиться.

В моем приложении Xamarin.Forms пользователь может добавить в базу данных SQLite:

public class Car
    {
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public string Text { get; set; }
        public int PickerValue { get; set; }
    }

PickerValue имеет тип INT, потому что я думаю, что выбранное значение средства выбора дает значение индекса INT.Я не прав?

Пользователь добавляет элемент, используя:

<Editor Placeholder="Enter name" Text="{Binding Text}" />
<Picker x:Name="myPicker" Title="Value:">
            <Picker.ItemsSource>
                <x:Array Type="{x:Type x:String}">
                    <x:String>value 1</x:String>
                    <x:String>value 2</x:String>
                </x:Array>
            </Picker.ItemsSource>
        </Picker>

На другой странице элементы отображаются с помощью ListView:

<Label Text="{Binding Text}"/>
<Label Text="{Binding PickerValue}"/>

Когда я выбираю элемент наListView - для меня открывается страница редактирования - та же страница, на которой я добавил новые продукты (код выше) с заполненными полями из базы данных.Я могу отредактировать их там.

Я хотел бы иметь возможность сохранить выбранное значение средства выбора в SQLite, и на другой странице я могу отобразить его (или индекс выбранного значения).Может кто-нибудь помочь мне, как сделать такую ​​привязку?

Если это возможно - я хотел бы сделать это в XAML.

Я сделал проект на основе: https://docs.microsoft.com/pl-pl/xamarin/get-started/quickstarts/database?pivots=windows

1 Ответ

1 голос
/ 11 июля 2019

Вот мой бегущий GIF.

enter image description here Вы можете напрямую установить этот подборщик.

Во-первых, я добавляю свойство в модель, здесь добавляется свойство Gender.

   public class Note
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public string Text { get; set; }
    public DateTime Date { get; set; }

    public  string Gender { get; set; }
}

Перед тем, как вставить данные в базу данных, вы должны установить это свойство следующим образом. Вам нужно преобразовать myPicker.SelectedItem; в string

 async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        note.Gender = (string)myPicker.SelectedItem;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }

На другой странице мы просто привязываем свойство Gender, как этот код.

  <ListView x:Name="listView"
          Margin="20"
          ItemSelected="OnListViewItemSelected">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
             <StackLayout>
                <Label Text="{Binding Text}"></Label>

                <Label Text="{Binding Gender}"></Label>
            </StackLayout>

            </ViewCell>
          </DataTemplate>
    </ListView.ItemTemplate>

Вот мое демо.

https://github.com/851265601/databaseDemo

Обновление Есть GIF об изменении текста страницы редактирования, он работает нормально. enter image description here

Я просто добавляю SelectedItem пикара,

   <Picker x:Name="myPicker" Title="Value:" SelectedItem="{Binding Gender}">
        <Picker.ItemsSource>
            <x:Array Type="{x:Type x:String}">
                <x:String>female</x:String>
                <x:String>male</x:String>
            </x:Array>
        </Picker.ItemsSource>
    </Picker>

Я снова обновляю свой проект. https://github.com/851265601/Datademo3/blob/master/Datademo2/Notes/App.xaml.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...