Доступ к значению из ObservableCollection из ListView - PullRequest
0 голосов
/ 14 мая 2018

Я создал следующую таблицу SQLite.

public class Settings
{

    public string Name { get; set; }

    [MaxLength(255)]
    public string Value { get; set; }
}

Таблица SQLite заполняется следующим кодом.

public partial class SQL : ContentPage
{
    private SQLiteAsyncConnection _connection;
    private ObservableCollection<Settings> _settings;

    public SQL()
    {
        InitializeComponent();


        _connection = DependencyService.Get<ISQLiteDb>().GetConnection();
    }

    protected override async void OnAppearing()
    {
        await _connection.CreateTableAsync<Settings>();

        var settings_name = new Settings { Name = "Meaning of Life", Value = "42" };
        await _connection.InsertAsync(settings_name);

        await DisplayAlert("Alert", "Value Added to database!", "OK");


        var settings = await _connection.Table<Settings>().ToListAsync();
        _settings = new ObservableCollection<Settings>(settings);
        ListView.ItemsSource = _settings;

        base.OnAppearing();
    }

    void MyItemTapped (object sender, System.EventArgs e)
    {
        DisplayAlert("Alert", e.ToString(), "OK");
    }
}

Затем она помещается в ListView со следующимXAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="BudgetBuddy.SQL">
    <ContentPage.Content>
                <ListView x:Name="ListView" ItemTapped="MyItemTapped" ItemSelected="MyItemSelected">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextCell Text="{Binding Name}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
</ContentPage>

У меня вопрос, как я смогу показать значение 42, когда кто-то нажимает элемент «Смысл жизни» в ListView?

Я пробовал разные вещи для.ToString (), например e.Item, но не существует в System.EventArgs.Я думаю, что мне нужно проверить что-то другое, чем System.EventArgs.Я думаю, что System.EventArgs называется пространством имен, это правильно?и как я узнаю, какие другие действительные варианты я могу выбрать?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Попробуйте сделать это при событии "ItemSelected"

    private void MyItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var selected = e.SelectedItem as Settings;
        DisplayAlert("Alert", selected.Value, "OK");
    }
0 голосов
/ 14 мая 2018

Анастасия ответ почти правильно. Вместо этого я использовал ItemTappedEvent и сделал небольшие корректировки для доступа к объекту:

private void MyItemSelected(object sender, Xamarin.Forms.ItemTappedEventArgs e)
{
    var settings = e.Item as Settings;
    DisplayAlert("Alert",  settings.Value, "OK");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...