ListView项目未出现

时间:2017-09-25 07:42:03

标签: listview xamarin xamarin.forms

我有一个listview,其中我从视图模型绑定其项目源,而在视图模型中的列表调试列表显示值,但在模拟器中没有值出现。

   <ListView x:Name="RegisteredUserList" ItemsSource="{Binding RegisteredUsers}" ItemSelected="RegisteredUserList_SelectedItemClicked" BackgroundColor="Aqua">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Vertical">
                            <Label Text="{Binding }" TextColor="Black" FontSize="13" HorizontalOptions="Center" VerticalOptions="Center"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

我的ViewModel代码是:

   private async void GetAllUsersFromServer()
    {
        var registeredPeople =await UserService.Instance.GetAllUsers();
        foreach (var names in registeredPeople)
        {
            RegisteredUsers.Add(names.UserName);
        }
    }

public List<string> RegisteredUsers { get { return _regesteredUsers; } set { _regesteredUsers = value; OnPropertyChanged(); } } private List<string> _regesteredUsers= new List<string>();

RegisteredUsers,它显示了名称列表,但UI正在给出值。如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您的RegisteredUsers属性必须声明和实例化,以便在任何更改(添加,删除,移动)时通知UI:

ObservableCollection<string> RegisteredUser = new ObservableCollection();

有关此类型的详细信息,请参阅https://developer.xamarin.com/api/type/System.Collections.ObjectModel.ObservableCollection%601/

答案 1 :(得分:0)

如果要添加项目,必须使用ObservableCollection。 使用List调用OnPropertyChanged。只有在初始化UI时(以及它为空时)才会通知UI。 ObservableCollection将在每次更改时通知UI。

此外,您如何/在何处设置视图的BindingContext? 它应该使用viewName.BindingContext = viewModelInstance;

在xaml或Code Behind中完成

答案 2 :(得分:0)

只有替换以下ViewModel代码才能保留其余部分

private async void GetAllUsersFromServer()
    {
        List<string> tmpRegisteredUsers = new List<string>();
        var registeredPeople =await UserService.Instance.GetAllUsers();
        foreach (var names in registeredPeople)
        {
            tmpRegisteredUsers.Add(names.UserName);
        }
        RegisteredUsers = tmpRegisteredUsers;
    }