我希望标题是可以理解的,但无论如何我会尽力描述问题。 我有一个ObservableCollection GroupList,它包含Group类型的对象。班级组非常简单:
public class Group
{
public Group()
{
Members = new ObservableCollection<Member>();
}
public Group(string name)
{
Members = new ObservableCollection<Member>();
GroupName = name;
}
public ObservableCollection<Member> Members { get; set; }
public string GroupName { get; set; }
}
GroupList是我在View中的ComboBox的ItemsSource,用于确定要在ListBox中显示哪些ObservableCollection成员。然后将ListBox中SelectedItem的属性绑定到某些TextBox,以显示每个Member的Name,Age等。
我的问题是我有一个名为=“所有成员”的组和其他成员也在其中的组。 A组包含成员A + B,B组包含成员B + C,但组All成员包含A + B + C.但是,如果我更改了组A中的成员A的属性,则不会反映在“所有组成员”中。我花了几天时间试图弄清楚出了什么问题,因为如果我在一个新项目中测试它(写下内存)它就像一个魅力:
ObservableCollection<Member> MembersA = new ObservableCollection<Member>;
ObservableCollection<Member> MembersA = new ObservableCollection<Member>;
Member newMember = new Member("TestMember",1986);
MembersA.Add(newMember);
MembersB.Add(newMember);
MembersA.First().Name="TestMemberChanged";
这会更新两个OC中的成员但不会更新我的项目,我无法弄清楚出了什么问题。我是否还需要为会员和群组实施类似INotifyPropertyChanged的界面? (它已在VM中的GroupList中实现)。或者我是否需要手动更新事件OnPropertyChanged或CollectionChanged中的所有OC?
private ObservableCollection<Group> _groupList;
public ObservableCollection<Group> GroupList
{
get
{
return _groupList;
}
set
{
_groupList = value;
Notify("GroupList");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void Notify(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
我意识到我的架构可能效率低下,因此非常欢迎任何改进建议。
答案 0 :(得分:0)
是的,您已经说过了答案:您还需要为Member类实现INotifyPropertyChanged,并在像“Name”这样的Member属性更改其值时引发该事件。这是因为ObservableCollection仅在从列表中添加/删除/重新排序项时通知用户界面,而不是在列表中的一个项的属性值发生更改时通知用户界面。