問題タブ [observablecollection]
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.
wpf - ObservableCollection をマルチスレッドで操作できない
ObservableCollection は、UI スレッドからの追加、削除、クリア操作のみをサポートしているようです。NO UI スレッドによって操作された場合、Not Support Exception がスローされます。ObservableCollection のメソッドをオーバーライドしようとしましたが、残念ながら多くの問題に遭遇しました。マルチスレッドで操作できる ObservableCollection サンプルを提供してくれる人はいますか? どうもありがとう!
.net - ObservableCollection の使用バックグラウンド スレッドあり
Microsoft は ObservableCollection に関して素晴らしいアイデアを持っていたようです。それらはバインドに最適で、UI で非常に高速です。
ただし、微調整するたびにディスパッチャー スレッドへのコンテキスト スイッチを要求するのは、少し面倒に思えます。それらを使用するためのベストプラクティスを知っている人はいますか? ビジネス層で ICollection をメッセージ オブジェクトとして設定し、UI 層で ObservableCollection を作成するだけですか? 次に、UI でコレクションの更新をどのように処理しますか?
wpf - ObservableCollection をクリアすると、e.OldItems にアイテムがありません
私は本当に私を油断させている何かをここに持っています。
アイテムで満たされた T の ObservableCollection があります。CollectionChanged イベントにアタッチされたイベント ハンドラーもあります。
コレクションをクリアすると、e.Action が NotifyCollectionChangedAction.Reset に設定された CollectionChanged イベントが発生します。わかりました、それは正常です。しかし奇妙なのは、e.OldItems にも e.NewItems にも何も入っていないことです。コレクションから削除されたすべてのアイテムで e.OldItems が満たされることを期待します。
他の誰かがこれを見たことがありますか?もしそうなら、彼らはどのようにそれを回避しましたか?
背景: CollectionChanged イベントを使用して別のイベントにアタッチおよびデタッチしているため、e.OldItems でアイテムを取得しないと、そのイベントからデタッチできません。
明確化: 私は、ドキュメントがこのように動作しなければならないことを完全に述べていないことを知っています. しかし、他のすべてのアクションについては、それが何をしたかを私に通知しています。だから、私の仮定は、それが私に言うだろうということです...クリア/リセットの場合も同様です。
以下は、自分で再現したい場合のサンプルコードです。まずxamlから:
次に、コードビハインド:
wpf - データバインドされたWPF ListBoxを強制的に更新するより良い方法は?
ObservableCollection にバインドされた WPF ListBox があります。コレクションが変更されると、すべての項目がその位置を更新します。
新しい位置はコレクションに保存されますが、UI は更新されません。だから私は以下を追加しました:
ItemsSource を null に設定して再度バインドすると、UI が更新され、
しかし、これはおそらく非常に悪いコーディングです:p
提案?
wpf - ObservableCollectionをページネーションする方法は?
アイテムが多すぎる ListBox があり、UI がどんどん遅くなります (仮想化がオンになっているなど)。そのため、最初の 20 項目のみを表示し、ユーザーが結果セット (つまり、ObservableCollection) をナビゲートできるようにすることを考えていました。
ObservableCollection にページネーション メカニズムが存在するかどうかは誰にもわかりませんか? 誰もそれをやったことがありますか?
ありがとう!
wpf - XAML-コレクション初期化子のStaticResources
XAMLで一度インスタンス化された単一のモデルオブジェクトを追加し、それを2つの異なるコレクション(xaml)に追加したいと思います。
次のコードはBlendのデザイン時に正常にレンダリングされますが、実行時に次のエラーが発生します。
「Post1」
の場合、タイプ「WpfBlog.Models.Tag」
のオブジェクトをタイプ「System.Collections.ObjectModel.ObservableCollection`1[WpfBlog.Models.Tag]」に変換できません。マークアップファイル'WpfBlog;component/Admin.xaml'のオブジェクト'WpfBlog.Admin'でエラーが発生しました。行XX位置YY。
「Post1」をコメントアウトすると、「Post2」でこのエラーが発生します。
プロパティが明示的なコレクションタグを使用している場合、プロパティは子要素を1つしか持てないため、プロパティ「タグ」に要素を追加できません。マークアップファイル'WpfBlog;component/Admin.xaml'行AA位置BBのオブジェクト'System.Windows.StaticResourceExtension'でエラーが発生しました。
次のコードはコンパイルされて正常に実行されますが、「TDD」という名前の2つのタグが作成されるため、タグの名前を変更しようとすると、1つのTagオブジェクトだけでなく、すべての投稿に対してそれを行う必要があります。
何か案は?Blendが正しくレンダリングしなかった場合は、無視して回避することができますが、実際にレンダリングされます。
wpf - データバインドされたWPF ObservableCollectionを永続化するための推奨される方法は?
ObservableCollection(Of MyObject) から継承するクラスがあり、MyObject クラスは INotifyPropertyChanged を適切に処理します。ユーザーがバインドされたコントロールを介してこのデータを更新すると、コレクションは期待どおりに変更されます。
各項目で MyObject.Save を呼び出して、このコレクションを XML としてディスクに保持するためのフォームに [保存] ボタンがあります。このロジックは私が書いたものです。
私の質問は、これがオブジェクトを永続化するための好ましい方法ですか、それともデータを保存/ロードするために使用する方法をWPFデータバインディング/ .Netフレームワークに伝える属性またはインターフェイスが欠けていることですか?
私が見た WPF サンプルでは、実際のデータの保存と読み込みが省略されているため、よくわかりません。
winforms - ObservableCollection(Of T)とBindingList(Of T)?
私はこの2年間、いくつかのデータベースのWinformsアプリケーションを開発しましたが、すべて正常に動作します。このアプリケーションは、レイヤー(DataAccess、ビジネスロジック、およびUI)上に構築されています。ビジネスロジックの場合、すべてのオブジェクトは、次の定義を持つBaseEntityという基本クラスから継承します(フレームワーク要素と組み合わせたカスタムオブジェクトとインターフェイスがいくつかあります)。
同じコアライブラリに、汎用ベースコレクションBaseEntityCollectionがあります。これらのコレクションを使用すると、オブジェクトごとに、データベースのアプリケーションで非常に興味深い、関連する強い型のコレクションを定義できます。基本的な定義は次のとおりです。
ご覧のとおり、Winformsでデータバインディングを正しく行うために必要なものをすべて使用しています。
- オブジェクトのINotifyPropertyChanged、INotifyPropertyChanging、IEditableObject。
- 私のコレクションのBindingList(Of T)に基づくコレクション。
新しいテクノロジにも興味があるので、最近WPFに関するWebキャストをいくつか見ました。これらのWebキャストでは、コレクションおよびデータバインディングサポートObservableCollection(Of T)の基本クラスとして使用されます。
一部のアプリケーションをWinformsからUIレイヤーのWPFに移行することを考えています。
私の質問は、私のビジネスロジックでは、BindingList(Of T)に基づいてコレクションを保持する方がよいのか、それともObservableCollection(Of T)から継承するように基本コレクションクラスを変更する必要があるのかということです。Winformsアプリケーション、WPFアプリケーション、またはASP.NETでも使用できる、すべてのプロジェクトに固有のベースコレクションを保持したいと思います。プロジェクトでLinqtoObjectsも使用しているので、フレームワーク2.0のみに基づいてプロジェクトを維持することで制限はありません。
wpf - DependencyProperty Strangeness
アイテムを に追加するだけで自動的に表示されるため、 and を使用して WPF アプリケーションを作成しました。たとえば、コレクション内のオブジェクトをラップパネルの画面上のボックスとして表示し、各ボックスObservableCollection
にその.Dependency Properties
ObservableCollection
Title
そのため、各項目Title
にプレフィックスまたはサフィックスを追加するだけでなく、Dependency Object プロパティが使用されていないように見えるようにしたいと考えました。ブレークポイントを設定できますが、到達することはありません。
送信プロパティにテキストを追加すると、そのテキストが表示されない理由を教えてもらえますか? 値は実際には「オブジェクトではなくWPFに保存されている」と読みましたが、それが何を意味するのかわかりません。
このテキストが表示されないテキストが依存オブジェクトによって出力されないのはなぜですか?
c# - BindingList や ObservableCollection などのクラスがスレッドセーフでないのはなぜですか?
何度も何度も、BindingList と ObservableCollection のスレッド セーフ バージョンを作成する必要があることに気付きました。UI にバインドすると、これらのコントロールを複数のスレッドから変更できないためです。私が理解しようとしているのは、なぜこれが事実なのかということです-それは設計上の欠陥ですか、それともこの動作は意図的なものですか?