У меня есть Xamarin.Forms (3.2, последняя версия) Picker
реализовано как
<Picker x:Name="ClassSelector"
Title="Select Class"
ItemsSource="{Binding Classrooms}"
ItemDisplayBinding="{Binding ClassroomName}"
SelectedItem="{Binding SelectedClassroom}">
</Picker>
BindingContext - это ViewModel:
public class ClassroomsViewModel : BaseViewModel
{
public ObservableCollection<Classroom> Classrooms { get; set; }
public ClassroomsViewModel()
{
Classrooms = new ObservableCollection<Classroom>(_ClassroomsRepository.GetAll());
}
}
Теперь, когда я добавляюкласс в ViewModel
, сборщик покорно добавляет элемент в свой список:
Classrooms.Add(new Classroom() { ClassroomName = "test" }); // this works fine
Но если я изменю класс, Picker
не обновит свой список элементов:
Classrooms[0].ClassroomName = "test"; // this doesn't have an effect,
// although the value is set
// in the ObservableCollection
Я также пытался явно позвонить:
OnPropertyChanged(); // nothing
OnPropertyChanged("Classrooms"); // nope
Если это важно, Classroom
происходит от ObservableObject
:
public class Classroom : ObservableObject
{
private string classroomName;
public string ClassroomName { get => classroomName; set => SetProperty(ref classroomName, value); }
}
Правка, в которой я поясняю, что не проблема замены коллекции:
Обратите внимание, что я не заменяю коллекцию Classrooms
новой ObservableCollection- как это происходит в других сообщениях, которые могут показаться похожими на мою проблему.Я просто изменяю одного из членов коллекции.Когда эта коллекция привязана к другому элементу управления (например, ListView
), она ведет себя точно так, как ожидается - обновления ListView
отражают новый ClassroomName
.
Может кто-нибудь указать мне, что я делаю неправильно?