【发布时间】:2019-03-18 16:18:05
【问题描述】:
我有一个 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 中添加教室时,Picker 会尽职尽责地将项目添加到其列表中:
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); }
}
编辑,我在其中澄清这不是集合替换问题:
请注意,我不会用新的 ObservableCollection 替换 Classrooms 集合 - 就像在可能与我的问题相似的其他帖子中发生的那样。我只是修改该集合的成员之一。当此集合绑定到不同的控件(如ListView)时,它的行为与预期完全一样——ListView 更新以反映新的ClassroomName。
谁能指出我做错了什么?
【问题讨论】:
标签: xamarin.forms observablecollection