問題タブ [icollectionview]
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# - ICollectionView が現在フィルター可能かどうかを確認する方法は?
ViewModel のプロパティに a のプロパティをバインドしていItemsSource
ます。DataGrid
次に、次のようにアイテム ソースICollectionView
を使用してデフォルト ビューを作成します。DataGrid
_displayItemsView = CollectionViewSource.GetDefaultView(_displayItems);
は で_displayItems
ありList
、_displayItemsView
はICollectionView
です。
今私が抱えている問題は、ユーザーが次のようにデータグリッドをフィルタリングできるようにしていることです:
これはほとんどの場合うまく機能しますが、ユーザーが現在行を編集または追加している場合DataGrid
、未処理の例外が によってスローされますICollectionView
。次のいずれかを検出するにはどうすればよいですか。
- は
DataGrid
現在修正中、または - は
ICollectionView
フィルタリングする状態ではありませんか?
あらゆるガイダンスを歓迎します。私はアイデアを受け入れます。ありがとう!
c# - WPF DataGridはDataGridRowを返さない
私は WPF アプリケーションで DataGrid を使用しており、最後まで DataGridRow を 1 つずつ取得するために for ループを使用しています。現在、for ループICollectionView
を使用した後にデータグリッドを並べ替えることICollectionView
ができません。
XAML マークアップ:
コードビハインド:
c# - アイテムが等しいと見なされる場合、ICollectionView 内のアイテムの順序を維持します
次の状況があります:SortId
プロパティでソートする必要があるアイテムのリストを取得します。
IComparable<T>
ItemViewModels にインターフェイスを実装したので、プロパティで使用Comparer.Default
して、ICollectionView.CustomSort
リフレクションを使用せずに並べ替えを適用できます (PropertySortDescription
そうです)。
さて、私の問題は、アイテムがSortId
コレクションに表示される順序で単純にソートされる必要があるため、アイテムにプロパティが設定されていないことがあることです。ただし、項目の数によっては順番が逆になったり、完全に混ざって表示されたりすることもあるようです。
この動作を回避する方法はありますか? 並べ替えを適用しない場合、アイテムは正しい順序で表示されます。ただし、アイテムのプロパティに応じて、並べ替えを動的にオンまたはオフにする必要がSortId
あります-これはまったく好きではありません...他のアイデアはありますか?
wpf - タスク ライブラリを使用して ICollectionView を読み込む
次の問題があります。wpf リストボックスにバインドされている ICollectionView に単純なリストをロードすると、期待どおりに CurrentChanged イベントが発生します。
ただし、データを別のスレッドにロードしていると想像してください。次に、 currentChanged イベントを発生させる同じ動作が必要ですが、機能しません。
UIスレッドで作業するために TaskScheduler.FromCurrentSynchronizationContext() を使用していますが、機能しないことに注意してください。私も Application.Current.Dispatcher.Invoke を試してみましたが、うまくいきませんでした。
wpf - コレクションにバインドするIcollectionviewのwpfデータグリッドドラッグ行
私はこのようなデータグリッドを持っています
このデータグリッドで行をドラッグしようとすると、コレクションビューで行のインデックスを取得できます。しかし、このインデックスはコレクション _productsPosition 内の同じ要素を取得するのに役立ちません。collectionView がフィルターによって変更されたためです。
したがって、_productsPositionではなく、コレクションビューで要素を移動するにはどうすればよいかという質問があります。例外をスローするこのようなもの:
例外の内容は次のとおりです。
未処理の例外: System.InvalidOperationException: ItemsSource の使用中は操作が無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更します。
System.Windows.Controls.ItemCollection.CheckIsUsingInnerView() で
System.Windows.Controls.ItemCollection.RemoveAt (Int32 removeIndex) で
作業サンプル:
ドラッグ機能:
wpf - DataGrid にコンテンツがある場合とない場合を検出する
Content がある場合、Button IsEnabled プロパティを DataGrid プロパティ/Event にバインドしたいと考えています。DataGrid の Item Source は Observable コレクションですが、フィルタリングを実装しているため、表示される内容は ItemSource コレクションとは異なる場合があります。
ビューが空または空でない場合に発生する DataGrid のイベントまたはプロパティはありますか?
c# - EF LoadAsync の後にビューを更新する
大量のデータが読み込まれることを想定して、データの読み込み中に UI が応答するようにしたいと考えています。現在、唯一の機能するコードは、望ましくない UI を常に更新する次のコードです。データを非 UI スレッドにロードし、ビューで最終更新を取得するにはどうすればよいですか?
注: への呼び出しを削除するとEnableCollectionSynchronization
、データはロードされますが、ICollectionView
とそのSourceCollection
アイテムは 1 つしかありません。
c# - プロパティの名前に基づいて個別の要素を見つける
データ グリッドに一意の値を表示し、ユーザーがグリッド内の特定の列の一意の値をフィルターできるようにする汎用フィルター コントロールを構築しようとしています。
この質問に対して提案された回答は気に入りましたが、それらはすべて事前にプロパティを知る必要があります。コードをOCPに準拠させ、プロパティ名の文字列を取り、それに個別の機能を適用するメソッドを1つだけ持ちたいと思います(おそらくリフレクションを使用します)。私の列を考慮して、この問題の最良の解決策は何ですか(それにより、名前、年齢などのフィルタリングする列名は動的です)。
具体的には、次の switch case ステートメントを回避しようとしています。
次のような一般的なメソッドがあります。
参考までに - ViewModel の私のコレクションは ICollectionView 型です (私が探している種類のフィルタリングを行う CollectionView で既に定義されている同様のものがあると思います)。
c# - ICollectionView へのバインディングが機能しない
だから、私はViewModelがItemsControlを介して割り当てられているUserControlのリストを作成しています
上記のコードは機能しますが、データを変更せずに逆に表示したいので:
ViewModel のどこかで、ブレークポイントを介してコードが実行されていることを確認しました
しかし、突然機能しなくなりました。どこにもエラーは返されませんが、UserControlA は正しく表示されません。(ユーザー コントロールは、データなしで表示されます - に保存されますREVERSEDListOfViewModels
)
理由はありますか?