我希望标题是可以理解的,但无论如何我会尽力描述这个问题。我有一个 ObservableCollection GroupList,其中包含 Group 类型的对象。类 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 是我在视图中拥有的 ComboBox 的 ItemsSource,它决定了要在 ListBox 中显示哪些 ObservableCollection 成员。然后将 ListBox 中 SelectedItem 的属性绑定到一些 TextBox 以显示每个成员的名称、年龄等。
我的问题是我有一个名称=“所有成员”的组和其他成员也存在的组。组 A 包含成员 A+B,组 B 包含成员 B+C,但组所有成员包含 A+B+C。但是,如果我更改 Group A 中说 Member A 的属性,它不会反映在 Group All 成员中。我花了几天时间试图找出问题所在,因为如果我在一个新项目中测试它(注销内存),它就像一个魅力:
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));
}
}
我意识到我的架构可能效率低下,因此非常欢迎提出任何改进它的建议。