問題タブ [listcollectionview]
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# - Telerik RadGrid に空白行を追加しようとすると Null 参照例外が発生する
以下の追加を実行しようとすると、NULL参照例外が発生し続ける理由を教えてください。ObservableCollection
これは、 が最初に空の場合にのみ発生します。最初からコレクションにデータがある場合、正常に動作します。
ObservableCollection
コレクションのロードと設定ViewSource
:
空のデータ グリッドに新しいレコードを追加
c# - ソートされたListCollectionView/ObservableCollectionにフィルターを適用します
私が持っているもの
私はとでUserControl
できTextBox
ていListBox
ます。以下に示すように、はカスタムの並べ替えとフィルターを使用して、経由でListBox
にItemsSource
バインドされています。コントロールの目的は、のテキストを含むソースコレクション内のアイテム(s)のみを表示することです。そのために、にフィルターを適用します。ObservableCollection
DataContext
ListCollectionView
ListBox
string
TextBox
ListCollectionView
さらに2つの制約があります。1、私の元のコレクションはアルファベット順にソートされていませんが、に表示されるアイテムListBox
はを使用していListCollectionView
CustomSort
ます。2、の文字列に一致する最初の5つの項目(アルファベット順にソート)のみを表示する必要がありますTextBox
。そのためにフィルターを適用しますListCollectionView
。
期待
私のコレクションが私のDataContext
:でそのように定義されているとしましょう。
そして、私TextBox
は文字「e」を入力しました(行われたすべての比較は大文字と小文字を区別しません)。ListBox
次の5つの項目が表示されることを期待しています( CurrentUICulture
fr-FRに設定されています)。
- アップル
- アップル
- チェリー
- Etape
- Étape
アルファベット順に並べ替えると、文字「e」を含む最初の5つの項目であるためです。ただし、アプリケーションで次のアイテムを取得します。
- アップル
- 葡萄
- 桃
- パイナップル
- スイカ
これは、私のコレクションの最初の5つのアイテムであり、文字「e」が含まれているため、アルファベット順に並べ替えられています。
私のコード
これが私が持っているものと私の問題を理解するためのコードです。事実上、以下のコピー/貼り付けを使用してのみ機能するはずです(名前空間とに注意してくださいCurrentUICulture
)。私はC#4.0を使用しています。
1)MainWindow
2)として使用されるクラスDataContext
3)私のXAMLUserControl
4)そして最後に、私の背後にある最も重要なコードUserControl
Foobar
。
メソッドで実行されるフィルタリングを除いて、コード全体が期待どおりに機能していますApplyFilter
。基本的に、このメソッドは、コレクション内のすべてのアイテムをにあるものと照合し、TextBox
返されるアイテムの最大数を超えていない場合、そのアイテムはフィルターに含まれます。ListCollectionView
このメソッドをデバッグすると、フィルターはではなくで実行されているように見えますが、アイテムはコレクションの元の順序で参照され、並べ替えられた順序では参照されていないことがわかりますObservableCollection<string>
。
フィルタが最初に適用され、次に並べ替えが適用されるようです。最初に並べ替えを適用し、次にフィルタリングを適用したいと思います。
私の質問
元のソートされていないコレクションではなく、ソートされたコレクションにフィルターを適用するにはどうすればよいListCollectionView
ですか?
wpf - 一部のレコードがロックされたWPF DataGridカスタムソート
カスタムソートが実装された WPF Datagrid があり、正常に動作します。コレクション内の一部のレコードを上下にロックする必要があります (上部ロックと下部ロック)。そのため、特定のレコードが上にロックされている場合、選択した列の値に関係なく、コレクションの最初のレコードにする必要があります (つまり、上にロックされ、下にロックされている行を並べ替えたくありません)。これが私のカスタムソート方法です。
LineSorterは、 IComparer実装を使用したカスタム ソーター クラスです。これはうまくいきます。ここで、ListCollectionView に上ロックと下ロックを適用します。上記で次のコードを試しましたが、変更はありません(つまり、リストはカスタムソート列のみに基づいてソートされます)。
このシナリオを行う方法はありますか、またはロックされたレコードを手動で削除してから追加する必要がありますか? 提案してください..
wpf - ListCollectionView.CurrentPosition セッター
ListCollectionView には、現在の位置 (CurrentPosition) を取得するプロパティがあります。
http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.currentposition.aspx
ただし、このプロパティは読み取り専用です。
(オプションで並べ替えおよびフィルター処理された) ビュー内の CurrentItem の序数位置を取得します。
では、現在の位置を設定するにはどうすればよいでしょうか。これが行動を伴わないことを願っています...
ListView または DataGrid の一番上までスクロールする必要がありますが、ビューの内部に入らずに、そのようなプロパティを簡単に設定して達成できるはずです。
前もって感謝します。
アップデート:
これは現時点での私自身の回避策です-しかし、それは一種の偽装です-MVVMを使用したい場合(F#を使用):
wpf - ListCollectionView-GroupDescriptions-グループ化されたアイテムの数を取得する方法は?
以下に示すようListCollectionView
に、を使用してグループ化されたインスタンスがありますPropertyGroupDescription
グループ化は正常に機能しますが、グループ化されたアイテムの数を次のように表示したいと思います。
カウントを表示することはできますか?
これが私が作成したサンプルアプリです。
背後にあるコード:
XAML:
c# - ListCollectionView を更新すると、ComboBox で選択した項目の値が null に設定されます
aListBox
と 2 つのComboBox
es のビューがあります。でアイテムを選択すると、選択したアイテムのプロパティの値に基づいて esListBox
のコンテンツ/値が更新されます。ComboBox
私のシナリオでは、ListBox
はクライアントのリストをComboBox
保持し、最初は国のリストを保持します。選択された項目は、クライアントの原産国です。2 つ目ComboBox
は、都市のリストを保持します。選択された都市は、クライアントの出身都市です。
2 番目のItemsSource
プロパティは、フィルターを使用してすべての都市の に基づいてComboBox
バインドされます。国の選択が変わると、フィルターを更新して、選択した国に属する都市のみを表示します。ListViewCollection
ObservableCollection
ListBox
クライアント A がニュージーランドのオークランド出身で、クライアント B がカナダのトロント出身であるとします。Aを選択すると、すべて正常に動作します。2 つ目ComboBox
はニュージーランドの都市のみが入力されており、オークランドが選択されています。ここで B を選択すると、選択した国はカナダになり、都市のリストにはカナダの都市のみが含まれ、トロントが選択されました。ここで A に戻ると、国でニュージーランドが選択され、都市のリストにはニュージーランドの都市のみが含まれますが、オークランドは選択されていません。
このシナリオをデバッグすると、B を選択すると、ListCollectionView.Refresh()
最初に選択されたクライアント A の都市の値が への呼び出しによって設定されることnull
がわかります (Refresh への呼び出しにブレークポイントを配置し、モデルの都市セッターに別のブレークポイントを配置し、以下のコードを参照してください)。
100% 確実ではありませんが、都市にTwoWay
バインディングがあり、フィルターがリストをカナダの都市に更新すると、オークランドが消え、この情報が物件に送り返され、に更新されます。これは、ある意味で理にかなっています。SelectedItem
ComboBox
null
私の質問は次のとおりです。どうすればこれを回避できますか? ItemsSource
が更新されただけのときに、モデルのプロパティが更新されないようにするにはどうすればよいですか?
以下は私のコードです (少し長いですが、問題を再現できる最小限のコードにしようとしました):
XAML は次のとおりです。
それが助けになる場合ComboBox
は、国の選択の変更の通知を処理するための私のカスタムのコードもここにあります。
この単純化された例では、 my のコンストラクターでビュー モデルを作成して設定しWindow
ます。
上記のコードをすべてコピーして貼り付けるだけで、問題を再現できるはずです。.NET 4.0 を使用しています。
最後に、この記事(およびその他の記事) を読み、指定された推奨事項を自分のケースに適応/適用しようとしましたが、成功しませんでした。私は間違ったことをしていると思います:
私もこの質問を読みましたが、ListBox
大きくなると、可能であればやりたくない何百ものアイテムを明示的に追跡する必要が生じる可能性があります。
c# - WPFでプログラムによってDataGridからソート矢印を削除する
私の WPF アプリケーションにはDataGrid
、並べ替え可能なデータを表示するいくつかの列があります。ユーザーは、必要な列をソートおよびサブソートできます。
並べ替えをクリアし、MVVM パターンを使用して並べ替えられていない状態に戻すボタンを追加しましたDataGrid
(つまり、ボタンはRelayCommand
ViewModel の にバインドされ、DataGrid のデータソースの をクリアしますSortDescriptions
)。
コードは次のようになります。
DataGridDataSource
はGroupedItems
(タイプの) オブジェクトListCollectionView
です。ボタンをクリックすると、DataGrid が元のソートされていない状態に戻ることがわかりますが、列ヘッダーのソート矢印は、DataGrid がまだソートされているかのように残ります。これらの矢印をプログラムで削除するにはどうすればよいですか?
c# - 列挙可能なコレクションのデフォルトの CollectionView を置き換えるにはどうすればよいですか?
列挙型を ItemsSource などにバインドする場合、バインディングは列挙型の既定のビューを使用します。これは、次のコードを使用して取得できることがわかっています...
これは私たちにとって非常にうまく機能し、たとえば、さまざまなコレクションのデフォルト ビューに並べ替え機能を追加できるようになりました。
ただし、適切に機能するために特殊な ListCollectionView サブクラスを必要とする特殊な Collection クラスがあります。とはいえ、誰かがコレクションに直接バインドしたときに返されるように、デフォルトのビューを変更するにはどうすればよいでしょうか?
回避策として、カスタム ListCollectionView を保持する MainView という新しいプロパティを作成し、ItemsSource などをそれにバインドしますが、これは、コレクションのコンシューマーに、コレクションに直接バインドするのではなく、直接バインドするように明示的に指示する必要があることを意味します。 MainView プロパティを使用しないと、既定のビューが取得されます。標準はコレクションに直接バインドするだけであることを考慮すると、これは回避しようとしている潜在的な問題です。
繰り返しになりますが、独自の ListCollectionView サブクラスをカスタム コレクションの既定のビューとして指定するにはどうすればよいでしょうか。