問題タブ [inotifycollectionchanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2102 参照

.net-3.5 - ObservableQueue?

INotifyCollectionChanged を実装する .Net のジェネリック Queue のバージョンを作成した人はいますか、それとも .Net フレームワークのどこかにすでに隠されているものはありますか?

0 投票する
13 に答える
121747 参照

c# - ObservableCollection は AddRange メソッドをサポートしていないため、アイテムが追加されるたびに通知を受け取りますが、INotifyCollectionChanging はどうですか?

範囲を追加して、一括全体を更新できるようにしたいと考えています。

また、アクションが完了する前にアクションをキャンセルできるようにしたいと考えています (つまり、「変更」以外のコレクションの変更)。


関連 Q 一度に複数のオブジェクトを追加して通知を受け取るための .Net コレクションはどれですか?

0 投票する
1 に答える
3546 参照

wpf - ItemsSource + Converter + Treeview が更新されない

これはかなり複雑です。うまくいけば、誰かが私を助けてくれるように、これを十分に明確にすることができます。Manager と呼べるオブジェクトがあります。Manager には、彼が管理する人々のコレクションがあり、人々はすべて IPerson を実装していますが、さまざまな種類の人々がさまざまなプロパティを持っています。このマネージャーをツリーで表示し、マネージャー ノードの下に、彼が管理しているすべてのプロジェクトを表示したいと考えています。これは、彼が管理する人々から判断できます。

したがって、コンバーターを使用して人をプロジェクトのリストに変換する計画です。XAML は次のとおりです。

私の Person クラスは INotifyPropertyChanged を実装し、人々を保持するリストは INotifyCollectionChanged を実装します。このコードは、ツリービューの ItemsSource を設定するとうまく機能し、マネージャーはプロジェクトのリストと共に表示されます。

ただし、人のリストに新しい人を追加しても、TreeView は更新されません。デバッグすると、追加アクションと追加された項目で CollectionChanged が起動していることがわかります。また、CollectionChanged イベントは null ではないため、UI が監視していることがわかります。ただし、アイテムが追加されたときにコンバーターは実行されません。

IPerson オブジェクトを保持する List の Add メソッドを次に示します。

どういうわけかデータバインディングを壊していますか?

他にどのようなことを確認できますか?

コンバーターは、人物リストの各アイテムを見て、彼らが取り組んでいるプロジェクトを把握し、プロジェクト名を出力リストに追加します。

0 投票する
2 に答える
5220 参照

wpf - WPF ListBox が INotifyCollectionChanged または INotifyPropertyChanged イベントにバインドされない

次のテストコードがあります。

および XAML

ロード時に外側のリストボックスに値が入力されます。エキスパンダーが展開されたらItemsSource、内側のリストボックスのプロパティを設定します(バインディングを使用する代わりにこれを行う理由は、この操作が非常に遅く、アイテムを表示することを選択した場合にのみ実行したいからです)。内側のリストボックスは正常にレンダリングされますが、実際CollectionChangedにはコレクションのイベントをサブスクライブしません。ICollection私はこれを の代わりに との代わりにIEnumerableと を追加INotifyPropertyChangedして試しましINotifyCollectionChangedINotifyPropertyChanged。これを実際に機能させる唯一の方法は、SomeCollectionクラスをガットしてから継承することObservableCollection<SomeItem>です。INotifyCollectionChanged使用する代わりに自分自身をロールしようとする私の理由ObservableCollectionこれは、実際のコードで COM コレクションをラップしているためです。INotifyそのコレクションは追加/変更/削除時に通知し、これらをWPF のイベントに変換しようとしています。

これが十分に明確であることを願っています(遅い)。

0 投票する
4 に答える
3676 参照

wpf - CollectionChanged で IValueConverter を更新するにはどうすればよいですか?

これは私の問題を説明するための基本的な例です。私が持っているとしましょう

Numbers の合計を返す IValueConverter です。

通常、私が行うことは、IValueConverter を IMultiValueConverter に変更し、次のように Numbers.Count に 2 番目の値をバインドすることです

ただし、この方法を使用して実際の問題を解決することはできません。私が考えていないコレクションが変更されたときにバインディングを更新するより良い方法があるはずです。項目が Numbers に追加および削除されたときに値コンバーターを実行するための最良の方法は何ですか?

0 投票する
1 に答える
1791 参照

wpf - ObservableCollection CollectionChanged イベントの処理

Silverlight ツールキットで次のようなコードを見たことがありますが、安全な方法を理解できません。

たとえばインデックス 5 からアイテムを削除すると、_itemsインデックス 5 以降のコレクション内のすべてのアイテムの現在のインデックスが以前よりも 1 つ少なくなることはありませんか? では、このコードのように「古い」インデックスを使用してアイテムを継続的に削除することは、どのように安全なのでしょうか?

なぜこれが機能するのかを本当に理解したいです。

何か案は?

0 投票する
3 に答える
2229 参照

.net - ObservableKeyedCollection がないのはなぜですか.NET フレームワークで?

.NET Framework にはバージョン 3.0 以降ObservableCollection<T>が含まれていますが、ObservableKeyedCollection<TKey, TValue> がないのはなぜですか。

さて、KeyedCollection<TKey,TValue>から派生させてINotifyCollectionChangedインターフェイスを実装することで、独自のコレクションを実装することはできますが、.NET Framework への適切な追加にはなりません。

0 投票する
2 に答える
651 参照

.net - アイテムが変更されたことを示すために使用される NotifyCollectionChangedAction はどれですか?

イベントを実装INotifyCollectionChangedして発生させるときCollectionChangedは、引数を指定する必要がありNotifyCollectionChangedActionます。NotifyCollectionChangedActionアイテムの値が変更された場合など、コレクション内のアイテムが変更されたことを示すために使用されるのはどれですか?

0 投票する
1 に答える
1130 参照

c# - カスタム ObservableCollection

私が作成した ObserverableCollection に似たクラスについて質問があります。私のクラスは基本的に同じ機能を持っていますが、アイテムがリストに追加されたときにいくつかの自動ソート機能を追加します。私の質問は、私のクラスがインターフェイス INotifyCollectionChanged を実装して、コレクションが変更されたときにコレクションを表示する ListView に通知されるようにすることです (少なくともこれは私が思っていたことです)。コレクションに追加または削除するたびに、コレクションが変更されたことを通知しますが、ListView には変更が表示されません。では、INotifyCollectionChanged の機能を解釈できなかったのでしょうか。代わりに INotifyPropertyChanged を使用する必要がありますか? 質問に関するヘルプは素晴らしいでしょう!

私のクラスの重要な部分は次のとおりです。

コレクションが変更されるたびに (アイテムの追加/削除)、OnCollectionChanged() を呼び出します。私のコレクションは LinkedList であり、NotifyCollectionChangedEventArgs コンストラクターには、通常 LinkedList にはない NotifyCollectionChangedAction.Add/Remove フラグのインデックスが必要なので、すべての変更に NotifyCollectionChangedAction.Reset を使用します。

コレクションを使用する私の ListView は、コレクションにアクセスするために ItemSource プロパティで Databinding を使用します。

さらにコードが必要な場合はお知らせください。

0 投票する
4 に答える
20331 参照

c# - 監視可能なスタックとキュー

とのINotifyCollectionChanged実装を探しています。私は自分で転がることはできましたが、車輪の再発明をしたくありません。StackQueue