問題タブ [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 投票する
3 に答える
5663 参照

c# - ObservableCollection の仕組み.作業を追加しますか?

ObservableCollection私は、コレクションにいくつかのメカニズムをカプセル化するように機能する特殊なコレクションを実装しようとしていました。そのために、コレクションも継承しCollection、同じインターフェイスも実装しています。

コレクション変更ロジック全体を実際に実装する方法がわかりません。たとえば、オーバーライドされていない (仮想としてマークされていない) ため、そのメソッドを使用してアイテムが追加された場合、イベントCollection<T>.Addはどのように発生しますか?ObservableCollectionCollectionChanged

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

c# - EntityFramework EntityCollection Observing CollectionChanged

私は最初にアプリケーションでEntityFrameworkデータベースを使用しています。どういうわけかEntityCollection、ViewModelのの変更について通知を受け取りたいのですが。それは直接サポートしていませんINotifyCollectionChanged(なぜ?)そして私は別の解決策を見つけることに成功していません。

これが私の最新の試みですが、ListChangedイベントが発生していないように見えるため、機能しません。

誰かが私がどのように変化を観察することができるかについて何か考えを持っていますEntityCollectionか?

ダン

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

asp.net - WPFのASP.NET DataBind()の代替は何ですか?

私は ASP.NET 開発者ですが、最近は WPF アプリケーションも開発しています。ASP.NET では、GridView のデータを更新する必要があるときはいつでもDataBind(). しかし、WPF での代替手段は何ですか? 回避策として、現在INotifyCollectionChangedデータを更新するために実装しています。

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

wpf - INotifyPropertyChanged または INotifyCollectionChanged で DataTable を使用しますか?

こんにちは、DataTables に問題があります。したがって、バインドされている DataTable の DataGrid 内のセルを変更するたびに検出する必要があります。

どうやってするの?またはと?INotifyPropertyChanged_INotifyCollectionChanged

注:私は試してINotifyPropertyChangedいますが、DataTableに値を設定したときにのみ検出され、DataGridのセルの値を変更しても検出されません。すでに試しOneWayましTwoWayたが、何も起こりません。

前もって感謝します!

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

wpf - WPF:ListViewのItemsSource CollectionChanged通知にフックするにはどうすればよいですか?

ListViewはにデータバインドされているを持っていObservableCollectionます...

コレクションが変更されたときにトリガーされるイベントが見つからないようです。どういうわけか、collectionchanged通知にフックする必要があると思いますか?どうすればいいのかよくわかりません。

基本的に、コレクションが変更された場合、ListViewがリストを更新する際にすでに行っていること以外の追加の作業を行いたいと思います。

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

c# - WPF: ユーザー描画コントロールに 2D 配列を表示する正しい方法は何ですか?

Color[,] 配列を表示するためだけにユーザー描画コントロールを作成したいと考えています。コントロール自体は、対応する色の長方形の NxM グリッドを描画する必要があります。

FrameworkElement から継承し、OnRender メソッドをオーバーライドしようとしています:

問題は、基になる配列の要素を変更しても、コントロールが再描画されないことです。ただし、まったく新しい配列を割り当てるか、コントロールのサイズを変更すると、正常に機能します。

明らかに、コレクション内の内部変更について何らかの方法でコントロールに通知する別のクラスが必要です。INotifyCollectionChange と ObservableCollection を見ていましたが、見つけた唯一の記事は、コレクションを既存のコントロールにバインドすることに関するものであり、カスタムのユーザー描画のものではありませんでした。そのため、この時点で混乱して行き詰まりました。

0 投票する
6 に答える
5612 参照

wpf - 監視可能な LinkedList

私の WPF アプリには、アイテムの値が以前に表示されたアイテムに依存する ItemsControl があります。

ViewModel は可変長の部分に分割されたオーディオ ファイルであり、右側に DateTime が表示されるように表示する必要があり、それを計算する必要があります (各部分の長さしかわかりません。計算する必要があります。実際の開始時間と終了時間、および ItemsControl 上の位置)。

私の最初のアプローチは を使用することでしたObservableCollection<MyviewModel>が、すぐにいくつかの恐怖が発生しました:

IMultiValueConverter実行時に前の要素しか知らなかったので、返す値を計算し、DataContext のプロパティをその値に設定する5 ウェイ マルチバインディング。

前の要素は、 のバインディングを使用して送信されましたRelativesource.PreviousData

今私の問題は、コンバーターから値を設定した後(明らかに悪いことです)、実際にそれを機能させた後、通常のコレクションにはその要素に順序の概念がないため、さらに先の場合残りの途中にオーディオパートを追加したいのですが、表示がめちゃくちゃです。

さらに、さらにビジネスロジックを実装する場合、このコンバーターで計算されたオーディオ パーツの開始と終了にアクセスする必要があるかもしれませんが、まだ表示されていない場合はどうなりますか?

したがって、そのアプローチはいくつかのレベルで間違っていました。

そこでググって調べて知ったLinkedList。今、私は基本的に Observable LinkedList であるクラスを作成しようとしています (ジェネリックである必要はありません):

そして、問題の核心は、コレクションを変更するメソッド (Addfirst、AddLast など) をオーバーライドできないため、OnNotifyCollectionChanged を適切に呼び出せないことです...

したがって、これらのメソッドごとにオーバーロードを作成できると考えていますが、それはかなり厄介に聞こえます...

要するに、独自のプロパティの 1 つを計算するために、各項目が前の項目の詳細を知っているある種のコレクションが必要です。

手がかりはありますか?これも良い解決策ですか?

ありがとう!

付録、ViewModel は次のようになります。

編集: Thomas と Will の回答を組み合わせようと思います: コンポジションを使用し (つまり、カスタム オブジェクトから継承するのではなく、LinkedList のインスタンスを保持します)、使用することを意図したメソッドを再定義します (AddAfter、AddFirstなど) 実際の LinkedList メソッドを呼び出した後、OnNotifyPropertychanged を呼び出すだけです。ちょっとした作業ですが、私の問題に対するエレガントな解決策はないと思います...

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

ienumerable - using Reactive Extensions to monitor IEnumerable

I'm connecting to an object that asyncronously loads a collection of objects into an IEnumerable. At the time I connect, the IEnumerable may have items already in it's collection, and may add items during the lifetime of the application that I need to be notified of as they occur. As an example, it could be a bank account containing a list of bank transactions.

The challenge is this. I want to combine the processing of the initial values in the IEnumerable with any new additions. They are currently two processes. I would like to eliminate the use of NotifyCollectionChanged entirely.

I can modify the backend holding the IEnumerable. It does not need to remain as an IEnumerable if a solution to this question exists otherwise.

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

c# - ObservableCollection で CollectionChanged イベントを発生させ、変更された項目を渡すにはどうすればよいですか?

から継承し、ObservableCollectionおよびなどのいくつかの追加メソッドを追加するクラスがAddRangeありますRemoveRange

私の基本メソッド呼び出しは次のとおりです。

これに関する私の問題は、コレクション内のアイテムにアクセスしe.NewItemsたりe.OldItems、イベントでアクションを実行したりしたいのですが、アクションがこれらの値を渡さないことですCollectionChangedNotifyCollectionChangedAction.Reset

NotifyCollectionChangedAction.Addだから私は代わりにを使うことができると思ったが、それは例外ResetをスローするRange actions are not supported

私の質問は、どのように CollectionChanged イベントを発生させ、新しいアイテム リストまたは古いアイテム リストに渡すことができるかということです。