0

うまくいけば、誰かがこれで私を助けてくれます。画像の編集に使用する Silverlight アプリを作成しています。ユーザーは、要素を含むレイヤーを含むプロジェクトを持っています。(要素は text 要素と image 要素です)。

プロジェクトを表すクラスがあります。が含まれておりObservableCollection<Layer>、各レイヤーには がありObservableCollection<Element>ます。要素は抽象クラスです。Element を継承する TextElement クラスと ImageElement クラスがあります。

私の問題は、コレクション内の要素を変更しても UI が更新されないことです。私はすべてのプロパティで INotifyPropertyChanged を使用しており、コレクションで CollectionChanged をキャッチしていますが、まだうまくいきません。CollectionChanged イベントはObservableCollection<Element>、その要素の 1 つの更新時にヒットすることはありません。

これは私がもともと持っていたコードです:

void Elements_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { this.NotifyChange("Elements"); }

誰かが助けてくれれば、とても感謝しています。

4

1 に答える 1

0

ObservableCollection<>アイテムが追加または削除されたときに公開されCollectionChangedますが、コレクション内のアイテムが変更されたときは公開されません。

これを回避するには、CollectionChangedイベントをサブスクライブしてから、ハンドラーINotifyPropertyChanged内に追加された要素をサブスクライブします。CollectionChanged

elementCollection.CollectionChanged += (s, a) =>
{
    foreach (Element element in a.NewItems)
        element.PropertyChanged += ElementChanged;
};

ElementChangedその後、メソッド内で UI を更新できます。

于 2012-06-11T18:11:11.917 に答える