0
public ObservableCollection<Activity> activities = 
    new ObservableCollection<Activity> { };

public class Activity{
    public ObservableCollection<Event> Events { get; set; }
}

public class Event : INotifyPropertyChanged
{
    private int _Status;
    public int Status
    {
        get { return _Status; }
        set 
        {
            _Status = value;
            OnPropertyChanged("Status");
        } 
    }
}

Statusan のプロパティEventが変更されたとします。OnPropertyChanged("Status")呼ばれますよね?

しかし、この変更についてもそのコレクションactivitiesに通知したいと思います。Event

何か方法はありますか??

再開しようとしています: このシナリオは上記で説明されています。あるイベントの変化を想像してみてください。このイベントの親アクティビティを内部に持つコレクション アクティビティに、この変更について通知する必要があります。そのため、インターフェイスのどこかに表示されたイベントを更新するメソッドを呼び出すことができます。このインターフェイスには、アクティビティ コレクションが表示されます。

このため、コレクションにも通知する必要があります。

4

3 に答える 3

0

静的アクションを作成するだけでこれを解決しました:

public class Event{
    public static Action OnChanged;
}

基本的に、イベントの変更に基づいて変更を行う必要があるたびに、これを呼び出します。

    private StatusMode _Status;
    [DataMember(Name = "Status")]
    public StatusMode Status
    {
        get { return _Status; }
        set 
        {
            _Status = value;
            OnPropertyChanged("Status");
            if (OnChanged != null)
            {
                OnChanged();
            }
        } 
    }

使用:

Event.OnChanged = UpdateContent;

public void UpdateContent()
{
//do something
}
于 2012-06-20T18:09:19.483 に答える
0

.netコレクションは、コレクション内のアイテムの変更のみを考慮し、コレクション内のアイテムの変更は考慮しません。

コレクション内のイベントを聞く人は誰でも、興味のあるアイテムのPropertyChangedをサブスクライブ/サブスクライブ解除する必要があります。

于 2012-06-20T13:38:56.813 に答える
0

それは苦痛であり、あなたのためにこれを行う組み込みのものは何もありません.

これを行う必要があるときは、ObservableCollection の CollectionChanged イベントをサブスクライブし、含まれているアイテムの PropertyChanged イベントのサブスクライブとサブスクライブ解除を手動で管理しました。削除されたアイテムの登録を解除することが重要であることに注意してください! そうしないと、イベント サブスクリプションが削除されたアイテムのガベージ コレクションを停止するという問題が発生する可能性があります。

プロパティが変更されたイベントをサブスクライブ/サブスクライブ解除するために、コレクションの周りに配置され、追加/削除を仲介するラッパーまたは独自のコレクション クラスを構築することは可能だと思います。努力する価値はないようでした。

これを行う理由については、最も基本的な例は、アイテムの変数セットがあり、セットがダーティかどうか、または保存が必要かどうかを知る必要がある場合です。保存アクションがセット全体で機能する場合、すべてのアイテムを監視する必要があるのは間違っているように感じます。これがよりクリーンなソリューションのように見える理由は他にもあると思います。

于 2012-06-20T14:07:03.243 に答える