ObservableCollection对象,每个对象都包含一个ObservableCollection不更新,即使同一个对象在更多的OC中

时间:2012-06-23 09:24:51

标签: c# wpf observablecollection

我希望标题是可以理解的,但无论如何我会尽力描述问题。 我有一个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));
        }
    }

我意识到我的架构可能效率低下,因此非常欢迎任何改进建议。

1 个答案:

答案 0 :(得分:0)

是的,您已经说过了答案:您还需要为Member类实现INotifyPropertyChanged,并在像“Name”这样的Member属性更改其值时引发该事件。这是因为ObservableCollection仅在从列表中添加/删除/重新排序项时通知用户界面,而不是在列表中的一个项的属性值发生更改时通知用户界面。