Как показать данные из списка просмотра для записи в xamarin по выбранному элементу через mvvm в viewmodel? - PullRequest
0 голосов
/ 22 января 2020

Я делаю грубую операцию через SQLite в xamarin, но я хочу показать данные из списка в записи, чтобы я мог обновить его, но я не знаю, как вызвать выбранный элемент, связанный в xaml

    <ListView  ItemsSource="{Binding companylist}" SelectedItem="{Binding selectedname}" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Label Text="{Binding name}"/>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <StackLayout>

        <Entry Text="{Binding id}" IsVisible="False"/>
        <Entry Placeholder="Name" Text="{Binding name}"/>
        <Button Text="Update" Command="{Binding UpdateCompanyCommand}"/>
    </StackLayout>
</StackLayout>

и код модели:

 public Command UpdateCompanyCommand { get; }
    async Task UpdateCompany()
    {
        var db = new SQLiteConnection(dbpath);
        Company company = new Company()
        {
            id=id,

            name = Name


        };
        db.Update(company);
        await Xamarin.Forms.Application.Current.MainPage.DisplayAlert("Message", "Name is Updated", "Ok");

    }

Ответы [ 2 ]

1 голос
/ 23 января 2020

Этого можно добиться, привязав свойство name к Entry с помощью SelectedItem of ListView, как показано ниже:

<Entry Text="{Binding name}" 
       BindingContext="{Binding SelectedItem, Source={x:Reference listView}}" />

Введите имя для ListView и установите BindingContext of Entry с помощью выбранного элемента. Запись будет обновляться при каждом изменении выбранного элемента списка.

1 голос
/ 23 января 2020

Если вы выберете новый элемент в ListView, будет запущен ItemSelected , затем вы можете выполнить следующие шаги для обновления пользовательского интерфейса и БД:

    ...
    this.BindingContext = ViewModel;
    ...

    private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        //1.get the selected model, get the selected name
        Company item = e.SelectedItem as Company;
        string selectedName = item.name;

        //2.update the name property in the model you bind to the entry.
        ViewModel.name = selectedName;

        //3. call UpdateCompany
        ...
        db.Update(item);

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