Как получить доступ к подвойству IEnumerable в XAML? - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть модель User.cs, которая выглядит как

class User
{
    int Id { get; set; }
    string Name { get; set; }
}

и UsersViewModel.cs

class UsersViewModel
{
    IEnumerable<User> Users { get; set; }
    readonly DatabaseContext database;

    UsersViewModel()
    {
        Users = 
            from user in database.Users
            orderby user.Id
            select user;
    }
}

, где DatabaseContext - это класс, который позволяет мне общаться с моим PostgreSQL.

Я хочу заполнить страницу Name каждого User, присутствующего в IEnumerable<User>. У меня есть UsersPage.xaml, который пытается сделать это с

<CollectionView ItemsSource="{Binding Users}">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout>
                <Label Text="{Binding }" />
            </StackLayout>
        </DataTemplate>
        </CollectionView.ItemTemplate>
</CollectionView>

, но он возвращает мне

MyGlobalNamespace.Models.User

столько раз, сколько у меня User записей в моей базе данных. Я знаю, что трюк лежит где-то в <Label Text="{Binding }" />, но я не могу понять, как это сделать.

Однако мне удалось добиться того, чего я хочу, добавив List<string> UserNames, который заполняется через

foreach (var user in Users)
{
    UserNames.Add(user.Name);
}

и замену {Binding Users} на {Binding UserNames}, но я очень сомневаюсь, что именно так я должен делать

1 Ответ

0 голосов
/ 18 апреля 2020

Оказалось, это было в разы легче, чем я думал. Как сказал @HamidRezaMohammadi, UsersPage.xaml должно выглядеть следующим образом:

<CollectionView ItemsSource="{Binding Users}">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout>
                <Label Text="{Binding Name}" />
            </StackLayout>
        </DataTemplate>
        </CollectionView.ItemTemplate>
</CollectionView>

, где Name зависит от свойства в моей User.cs модели

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