0

タイトルがわかりやすいといいのですが、とにかく問題点をできる限り説明していきたいと思います。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));
        }
    }

私のアーキテクチャは非効率的である可能性があることを認識しているので、それを改善する方法の提案は大歓迎です。

4

1 に答える 1

0

はい、あなたはすでに答えを言いました:あなたはMemberクラスにもINotifyPropertyChangedを実装し、'Name'のようなMemberのプロパティがその値を変更したときにそのイベントを発生させる必要があります。これは、リスト内の1つのアイテムのプロパティ値が変更されたときではなく、アイテムがリストから追加/削除/並べ替えられたときにObservableCollectionがユーザーインターフェイスに通知するためです。

于 2012-06-23T09:29:39.303 に答える