我有一个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正在给出值。如何解决这个问题?
答案 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;
}