タイトルがわかりやすいといいのですが、とにかく問題点をできる限り説明していきたいと思います。Groupタイプのオブジェクトを含むObservableCollectionGroupListがあります。クラスグループは非常に単純です。
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を決定します。次に、リストボックス内のSelectedItemのプロパティがいくつかのテキストボックスにバインドされ、各メンバーの名前、年齢などが表示されます。
私の問題は、Name ="Allmembers"のグループとメンバーも存在する他のグループがあることです。グループAにはメンバーA+Bが含まれ、グループBにはメンバーB + Cが含まれますが、グループすべてのメンバーには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));
}
}
私のアーキテクチャは非効率的である可能性があることを認識しているので、それを改善する方法の提案は大歓迎です。