Привязка текста метки к индексу в списке XAML - PullRequest
0 голосов
/ 19 марта 2019

Так что в коде я извлекаю базу данных sqlite и создаю список людей с различными свойствами. Я хочу прикрепить свойство Name к тексту кнопки. Вот объект в коде (у меня он есть в методе OnAppearing):

List<Person> People = await App.PersonRep.GetAllPeople();

Я пытаюсь привязать определенный индекс из этого списка к кнопке в XAML, но изо всех сил пытаюсь найти решение, которое работает. Помещает ли кнопка в просмотр списка единственный путь? Я надеялся сделать что-то, что может выглядеть чище или быть проще

РЕДАКТИРОВАТЬ больше код:

<ContentPage.Content>
    <ListView x:Name="peopleList">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell Height="30">
                    <StackLayout Padding="5">
                        <Button Text="{Binding People[0].PersonName}" />
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>

А затем это в коде позади:

public List<Person> People { get; set; }

        protected override void OnAppearing()
    {
        PopulatePeople();

    }



    public async void PopulatePeople()
    {
        List<Person> People = await App.PeopleRepo.GetAllPeople();
            peopleList.ItemsSource = People; 

А затем это метод GetAllPeople из класса PeopleRepository (объект PeopleRepo типа PeopleRepository также создается в классе App):

        public SQLiteAsyncConnection conn;
    public PeopleRepository(string db)
    {
        conn = new SQLiteAsyncConnection(db);
        conn.CreateTableAsync<Person>().Wait();
    }

        public async Task<List<Person>> GetAllPeople()
    {
        try
        {
             return await conn.Table<Person>().ToListAsync();
        }
        catch (Exception ex)
        {
            Status = string.Format("Failed to retrieve data. {0}", ex.Message);
        }

        return new List<Person>();
    }

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

вы можете использовать [] в путях привязки для ссылки на индекс

в вашем коде

//you can only bind to public properties
public List<Person> People { get; set; }

в вашем XAML

<Label Text="{Binding People[10].Name}" />
0 голосов
/ 19 марта 2019

Есть несколько способов сделать это.

Одним из способов может быть создание комбинированного списка и назначение списка как ItemsSource.Затем вы можете сделать некоторые метки и ввести и назначить выбранного человека в поле со списком как DataContext для окна.

Скажем, например, что это XAML:

        <ComboBox x:Name="personCombobox" HorizontalAlignment="Left" SelectionChanged="personCombobox_OnSelectionChanged">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FirstName, Mode=OneWay}" />
                        <TextBlock Text=" - " />
                        <TextBlock Text="{Binding LastName, Mode=OneWay}" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        <Label Content="{Binding FirstName, Mode=OneWay}"/>
        <Label Content="{Binding LastName, Mode=OneWay}" />

И тогда код будет выглядеть примерно так:

public MainWindow()
        {
            InitializeComponent();

            personCombobox.ItemsSource = personRepository.GetAll();
            personCombobox.SelectedIndex = 0;

        }

 private void personCombobox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            if (personCombobox.SelectedIndex != -1)
            {
                this.DataContext = (Person)personCombobox.Items.GetItemAt(personCombobox.SelectedIndex);
            }
        }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...