問題タブ [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.
c# - INotifyCollectionChanged-どのくらいの頻度で起動しますか(そしてどのように効率的/高速にしますか)?
基本的に、ここでは実際にどのように効率的か疑問に思います。
サンプルコード:
これにより、毎回CollectionChangedイベントが発生し、UIが毎回更新される必要がありませんか?それとも、GetItems関数が完了するまで待機するようにしますか?
基本的に、WPFはそれを非常にうまく処理しているようですが、どうやってそれを行ったのだろうかと思います。
c# - ObservableCollectionsとC#のプロパティの変更
Job
定義したクラスの監視可能なコレクションを使用しています。INotifyCollectionChanged
イベントを処理するためのメソッドをバインドしました。MSDNによると、これINotifyCollectionChanged
は「アイテムが追加および削除されたときやリスト全体が更新されたときなど、動的な変更のリスナー」ですが、コレクション内の任意のジョブクラスのプロパティへの変更をリッスンしたいと思います。このためのイベントハンドラーはありますか?INotifyPropertyChanged
インターフェイスがあることは理解していますが、これをコレクションで機能させたいと思います。
編集:
私はこれに正直に混乱しているので、私が答えを得ることができるように、私がしていることについてより多くの背景情報を与える必要があります。'Job'クラスにこのプロパティがあります:
このジョブクラスは、実際にはtelerikコントロールの予定クラスを継承します(これは、INotifyPropertyChangedを実装するために発生します)。telerikのドキュメントから、上記のコード(メッセージボックスを除く)も取得しました。このブール値を一度変更すると、そのメッセージボックスの行が5回実行されます。
助けていただければ幸いです!!
編集2:IsPlannedされたパスが変更されました:
これらは両方とも、(リストボックスからの)カスタムドラッグドロップ動作のオーバーライドを定義するために使用される異なるクラスからのものです。
c# - 添付プロパティに格納されたコレクションの CollectionChanged イベントのサブスクライブ解除
INotifyCollectionChanged
オブジェクトにプロパティをアタッチするアタッチ プロパティ (静的クラスで宣言) があります。
プロパティが設定されたら、コレクションの変更の監視を開始し、コレクションが添付されているオブジェクトに対して何らかのアクションを実行したいと考えています。
最初の試み:
d
コレクションがアタッチされているオブジェクトをハンドラーに取得するために、クロージャーをプルします。簡単ですよね?
さて、ここでバグを見ることができると確信しています。コレクションが削除されるか、新しいコレクションに置き換えられると、changedFunc は別のクロージャーを持つ新しいハンドラーであるため、イベント ハンドラーの登録解除に失敗します。
それで、これを行う正しい方法は何ですか?
c# - INotifyCollectionChanged が IList を使用する理由
ここまで読んで、なぜそうでないのか理解できませんIList<T>
。しかし、なぜ IList なのか? 追加しても意味がないので、単に IEnumerable にするか、または本当にインデクサーが必要な場合 (理由はありません)、ReadOnlyCollection を使用します。
silverlight - 複数のアイテムをサポートするために Silverlight NotifyCollectionChangedEventArgs をハッキングする際の使用法はありますか?
NotifyCollectionChangedEventArgs の Silverlight バージョンは、複数の (追加、変更、削除された) 項目を受け入れないという点で、完全なフレームワーク バージョンとは異なります。リストを受け取るコンストラクターが実際には欠落しているため、Microsoft はこの使用法をブロックすることを意図していたようです。実際、アイテムのコレクションを渡すと、それらは内部コレクションの最初のアイテムとしてネストされます。
でも!NewItems メンバーと OldItems メンバーは IList 型であるため、不変ではなく、成長させることができます。このアイデアをテストするために、次のヘルパーを作成しました。
まだ問題は発生していませんが、Silverlight のこの特定のコーナーに関する経験と意見を求めています。このように追加をバッチ処理する必要がありますか、それとも単にリセットを使用する必要がありますか?
ちなみに、これは Windows Phone 7.1 (Mango) です。
編集:Ernoによるコメントをフォローアップする。Microsoft は、 MSDN のこの (不適切な表現の) Silverlight ドキュメント ページで、「一般的に」NewItems には 1 つの要素しかないと想定できると述べており、NewItems[0] を使用してそれにアクセスするショートカットを提案しています。そのため、「互換性」のために IList シグネチャを保持しますが、その後、型の意味を解体します。残念です。
c# - ObservableCollection および CollectionChanged イベントを WCF データ契約として
ObservableCollection で DataContract を使用します。
だから、このようにコレクションを扱うとき。
アイテムが追加されましたが、CollectionChanged イベントが発生しませんでした。
なんで?
c# - c#でデータバインドされたコレクションを更新するには?
単純な wpf アプリケーションを作成していますが、立ち往生しています。私はフィルタークラスを持っていることを達成したいと思います.idがユーザー入力によってフィルタークラスで変更された場合、フィルターを適用してリストを更新する必要があります。すべての初期バインディングが機能しています。リストは CompanyId と共に適切に表示されます。
xaml のデータバインディング:
xaml の分離コード:
(ダミー)ファクトリークラス:
ProductList インターフェース:
製品リスト クラス:
Company クラス (フィルター クラス):
リストは工場出荷時に更新されますが、ビューに変更はありません。私はおそらく何か間違ったことをしています。私のアプローチ全体が最善ではないのかもしれません。たぶん、valueconverter で ObservableCollection タイプを使用する必要がありますか? どんな助けでも大歓迎です。乾杯!
wpf - ItemsControl.ItemsSource が変更されたときに UI を更新するトリガーは何ですか?
この質問に続いて、BindingList と ObservableCollection の違いを調べていました: Why NOT BindingList in WPF
この一環として、ItemsControl の ItemsSource を List、Collection、ObservableCollection、BindingList などのさまざまな型にバインドするテストを行いました。
私が驚いたのは、ObservableCollection または BindingList のいずれかが変更されたときにインターフェイスが更新され、他のものが変更されたときに更新されなかったことです。では、WPF がリッスンしているのは、その更新の原因となるものでしょうか? BindingList はそれを実装していないため、以前に考えたように、INotifyCollectionChanged イベントにすることはできません。当惑した。
c#-4.0 - 監視可能なコレクション-CollectionChangedBinding
プログラミング中に、次の質問に遭遇しました。
監視可能なコレクションは、それ自体でCollectionChangedイベントを実装しますか?(それがそうであるという事実を参照している異なる本のために、しかしグーグルはそうではないことを示しています)
次のコードがあり、バインディングによってUIを更新したい(コードはwindowsPhone 7.1用です)また、バインディングは監視可能なコレクション内の単一のアイテムに対して機能しますが、コレクションに新しいオブジェクトを追加しようとすると、 CollectionChangedイベントは発生しません。
名前空間Phone.lib.ViewModel{パブリッククラスDeviceViewModel:ViewModelBase {
/li>
注:このクラスは、Inotifyが変更されたインターフェースを含むviewmodelベースから継承します。
私のXamlからのコード:
私は2日間ほどこの問題に取り組んでいるので、誰かがこの問題について私を助けてくれることを願っています。
また、私の「悪い」英語についてお詫びしますが、英語は私の母国語ではありません
乾杯-バート
編集:少しテストを行いました
自分で少しデバッグテストを実行して、追加操作が正しいコレクションに追加されるかどうかを確認しました。そのため、カウント値が増加します。
出力:
追加アイテム数1
追加アイテム数2
追加アイテム数5
編集2(19-03-2012)
先週の金曜日、私はあなたが提案したようにそれを機能させようとしました。しかし、どういうわけかXAMLはInfoListを見つけることができず、その理由はわかりません。XAML自体、またはDeviceViewModelの背後にあるコードまたはDeviceViewModelで何か問題が発生している可能性があります。だからここに私が今持っているものがあります:
DeviceViewModel:
ページの背後にあるコード:
XAMLコード: