問題タブ [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 の変更実行時にリソースとして宣言
データベースから取り込まれた一連の ObservableCollections があります。アプリケーションの有効期間中にこれらのコレクションが大きくなる可能性が高く、30 秒ごとに更新する必要があります。
App.xaml のマージされた辞書で、コレクションをリソースとして宣言します。Application.FindResource() メソッドを使用してこれらのコレクションを正常に取得できますが、結果のコレクションに加えた変更は、FindResource を再度呼び出しても反映されません。たぶん、これが当てはまると思うのは素朴です。
私は正しいですか、それとも間違っていますか?
wpf - ObjectDataProviderメソッドへのWPFバインドと、戻り値の依存関係の検出
ObjectDataProviderを使用してメソッドにバインドしています。このメソッドを公開するクラスには、タイプT:INofifyChangedのObservableCollectionが含まれています。私の問題は、メソッドの戻り値がそのObservableCollectionの値に依存しているため、ObservableCollectionが何らかの方法で変更されたときにバインディングを更新する必要があることです。
つまり、メソッドの戻り値は他の要因に依存しているので、依存関係が変更されたときにこのメソッドのバインディングを更新する必要があります。
メソッドの戻り値がいつ異なるかをバウンドコントロールに知らせるにはどうすればよいですか?
wpf - WPF データバインディング、ソース オブジェクトの置き換え
「T」が INotifyProperty Changed を適切に実装するタイプ T の ObservableCollection にバインドされた UI があります。
問題は、ObservableCollection が SQL 呼び出しから入力されるため、実行時に完全に交換する必要があることです。これは明らかにバインド全体を混乱させ、変更通知は発生しません。
バインディングを失うことなく、実行時にソース オブジェクトを置き換えるにはどうすればよいですか?
コードは大体こんな感じ
c# - ObservableCollection は AddRange メソッドをサポートしていないため、アイテムが追加されるたびに通知を受け取りますが、INotifyCollectionChanging はどうですか?
範囲を追加して、一括全体を更新できるようにしたいと考えています。
また、アクションが完了する前にアクションをキャンセルできるようにしたいと考えています (つまり、「変更」以外のコレクションの変更)。
c# - マージされた ObservableCollection
2 つの ObservableCollections があり、それらを 1 つの ListView コントロールで一緒に表示する必要があります。この目的のために、これら 2 つのコレクションを 1 つの ObservableCollection として表示する MergedCollection を作成しました。このようにして、ListView.ItemsSource をマージされたコレクションに設定でき、両方のコレクションがリストされます。追加は正常に機能しますが、アイテムを削除しようとすると、未処理の例外が表示されます。
MergedCollection のコードは次のとおりです。
よろしく
c# - ObservableCollection の既存の要素を更新するにはどうすればよいですか?
ObservableCollection のインスタンスを、2 つの個別のデータ テンプレート (1 つは表示用、もう 1 つは編集用) を持つ WPF リストボックスにバインドしています。編集用のデータ テンプレートには、テキスト ボックスに一方向のバインディングがあり、[保存] ボタンがあります。
[保存] ボタンを押したときに (リスト項目を編集モードにした後)、テキストボックスを変更して ObservableCollection (および表示) の値を置き換えるには、どのような変更を加える必要がありますか?
c# - ObservableCollection 内のオブジェクトを識別して置き換える最も効率的な方法は何ですか?
プロパティが変更された顧客オブジェクトを受け取るメソッドがあり、そのオブジェクトの古いバージョンを置き換えてメイン データ ストアに保存したいと考えています。
以下でこれを行うための疑似コードを記述する正しいC#の方法を知っている人はいますか?
c# - ObservableCollection および ListBoxItem DataTemplate 生成の問題
ObservableCollection で奇妙なことが起こっています。
次のコードがあります。
ここでやろうとしているのは、ObservableCollection _display に入るアイテムの数を制御することです。この for ループ内で、要素の高さの合計 (+offset) がリストボックス自体よりも大きくなるまで、要素が追加されることがわかります。
さて、これは奇妙です。この for ループの後、elementsHeight は 0 になります。(CalculateItemsHeight は、lbi が null でなくても、for ループの反復ですべて 0 を返します) datatemplate で定義された UI 要素が作成されていないようです...
まだ。
ここで、_display.Add(verse) の後にいくつかの MessageBoxes を配置すると、CalculateItemsHeight が実際にアイテムの高さを返すことがわかります。
示されているように for ループを変更した後、最後の MessageBoxは実際に、処理されたすべての要素の実際の高さを示しています。
私の質問は、UI 要素が実際に作成されるのはいつですか? MessageBoxの表示中にどこかで行われたようです。この動作は私にとってはかなり奇妙です。スレッドと関係があるのかもしれませんが、よくわかりません。
_display ObservableCollection に追加すると、明らかにすぐにアイテムが作成されますが、その視覚要素は作成されません (ただし、後で追加されますが、正確な時期はわかりません)。メッセージ ボックスをポップアップ表示せずに、これと同じ動作を行うにはどうすればよいですか?