問題タブ [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.

0 投票する
1 に答える
876 参照

c# - Telerik RadGrid に空白行を追加しようとすると Null 参照例外が発生する

以下の追加を実行しようとすると、NULL参照例外が発生し続ける理由を教えてください。ObservableCollectionこれは、 が最初に空の場合にのみ発生します。最初からコレクションにデータがある場合、正常に動作します。

ObservableCollectionコレクションのロードと設定ViewSource:

空のデータ グリッドに新しいレコードを追加

0 投票する
1 に答える
4022 参照

c# - ソートされたListCollectionView/ObservableCollectionにフィルターを適用します

私が持っているもの

私はとでUserControlできTextBoxていListBoxます。以下に示すように、はカスタムの並べ替えとフィルターを使用して、経由でListBoxItemsSourceバインドされています。コントロールの目的は、のテキストを含むソースコレクション内のアイテム(s)のみを表示することです。そのために、にフィルターを適用します。ObservableCollectionDataContextListCollectionViewListBoxstringTextBoxListCollectionView

さらに2つの制約があります。1、私の元のコレクションはアルファベット順にソートされていませんが、に表示されるアイテムListBoxはを使用していListCollectionView CustomSortます。2、の文字列に一致する最初の5つの項目(アルファベット順にソート)のみを表示する必要がありますTextBox。そのためにフィルターを適用しますListCollectionView

期待

私のコレクションが私のDataContext:でそのように定義されているとしましょう。

そして、私TextBoxは文字「e」を入力しました(行われたすべての比較は大文字と小文字を区別しません)。ListBox次の5つの項目が表示されることを期待しています( CurrentUICulturefr-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ですか?

0 投票する
1 に答える
638 参照

wpf - 一部のレコードがロックされたWPF DataGridカスタムソート

カスタムソートが実装された WPF Datagrid があり、正常に動作します。コレクション内の一部のレコードを上下にロックする必要があります (上部ロックと下部ロック)。そのため、特定のレコードが上にロックされている場合、選択した列の値に関係なく、コレクションの最初のレコードにする必要があります (つまり、上にロックされ、下にロックされている行を並べ替えたくありません)。これが私のカスタムソート方法です。

LineSorterは、 IComparer実装を使用したカスタム ソーター クラスです。これはうまくいきます。ここで、ListCollectionView に上ロックと下ロックを適用します。上記で次のコードを試しましたが、変更はありません(つまり、リストはカスタムソート列のみに基づいてソートされます)。

このシナリオを行う方法はありますか、またはロックされたレコードを手動で削除してから追加する必要がありますか? 提案してください..

0 投票する
2 に答える
1420 参照

wpf - ListCollectionView.CurrentPosition セッター

ListCollectionView には、現在の位置 (CurrentPosition) を取得するプロパティがあります。

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.currentposition.aspx

ただし、このプロパティは読み取り専用です。

(オプションで並べ替えおよびフィルター処理された) ビュー内の CurrentItem の序数位置を取得します。

では、現在の位置を設定するにはどうすればよいでしょうか。これが行動を伴わないことを願っています...

ListView または DataGrid の一番上までスクロールする必要がありますが、ビューの内部に入らずに、そのようなプロパティを簡単に設定して達成できるはずです。

前もって感謝します。

アップデート:

これは現時点での私自身の回避策です-しかし、それは一種の偽装です-MVVMを使用したい場合(F#を使用):

0 投票する
1 に答える
6929 参照

wpf - ListCollectionView-GroupDescriptions-グループ化されたアイテムの数を取得する方法は?

以下に示すようListCollectionViewに、を使用してグループ化されたインスタンスがありますPropertyGroupDescription

グループ化は正常に機能しますが、グループ化されたアイテムの数を次のように表示したいと思います。

ここに画像の説明を入力してください

カウントを表示することはできますか?

これが私が作成したサンプルアプリです。

背後にあるコード:

XAML:

0 投票する
1 に答える
3543 参照

c# - ListCollectionView を更新すると、ComboBox で選択した項目の値が null に設定されます

aListBoxと 2 つのComboBoxes のビューがあります。でアイテムを選択すると、選択したアイテムのプロパティの値に基づいて esListBoxのコンテンツ/値が更新されます。ComboBox私のシナリオでは、ListBoxはクライアントのリストをComboBox保持し、最初は国のリストを保持します。選択された項目は、クライアントの原産国です。2 つ目ComboBoxは、都市のリストを保持します。選択された都市は、クライアントの出身都市です。

2 番目のItemsSourceプロパティは、フィルターを使用してすべての都市の に基づいてComboBoxバインドされます。国の選択が変わると、フィルターを更新して、選択した国に属する都市のみを表示します。ListViewCollectionObservableCollectionListBox

クライアント A がニュージーランドのオークランド出身で、クライアント B がカナダのトロント出身であるとします。Aを選択すると、すべて正常に動作します。2 つ目ComboBoxはニュージーランドの都市のみが入力されており、オークランドが選択されています。ここで B を選択すると、選択した国はカナダになり、都市のリストにはカナダの都市のみが含まれ、トロントが選択されました。ここで A に戻ると、国でニュージーランドが選択され、都市のリストにはニュージーランドの都市のみが含まれますが、オークランドは選択されていません。

このシナリオをデバッグすると、B を選択すると、ListCollectionView.Refresh()最初に選択されたクライアント A の都市の値が への呼び出しによって設定されることnullがわかります (Refresh への呼び出しにブレークポイントを配置し、モデルの都市セッターに別のブレークポイントを配置し、以下のコードを参照してください)。

100% 確実ではありませんが、都市にTwoWayバインディングがあり、フィルターがリストをカナダの都市に更新すると、オークランドが消え、この情報が物件に送り返され、に更新されます。これは、ある意味で理にかなっています。SelectedItemComboBoxnull

私の質問は次のとおりです。どうすればこれを回避できますか? ItemsSourceが更新されただけのときに、モデルのプロパティが更新されないようにするにはどうすればよいですか?

以下は私のコードです (少し長いですが、問題を再現できる最小限のコードにしようとしました):

XAML は次のとおりです。

それが助けになる場合ComboBoxは、国の選択の変更の通知を処理するための私のカスタムのコードもここにあります。

この単純化された例では、 my のコンストラクターでビュー モデルを作成して設定しWindowます。

上記のコードをすべてコピーして貼り付けるだけで、問題を再現できるはずです。.NET 4.0 を使用しています。

最後に、この記事(およびその他の記事) を読み、指定された推奨事項を自分のケースに適応/適用しようとしましたが、成功しませんでした。私は間違ったことをしていると思います:

私もこの質問を読みましたが、ListBox大きくなると、可能であればやりたくない何百ものアイテムを明示的に追跡する必要が生じる可能性があります。

0 投票する
1 に答える
2495 参照

c# - WPFでプログラムによってDataGridからソート矢印を削除する

私の WPF アプリケーションにはDataGrid、並べ替え可能なデータを表示するいくつかの列があります。ユーザーは、必要な列をソートおよびサブソートできます。

並べ替えをクリアし、MVVM パターンを使用して並べ替えられていない状態に戻すボタンを追加しましたDataGrid(つまり、ボタンはRelayCommandViewModel の にバインドされ、DataGrid のデータソースの をクリアしますSortDescriptions)。

コードは次のようになります。

DataGridDataSourceGroupedItems(タイプの) オブジェクトListCollectionViewです。ボタンをクリックすると、DataGrid が元のソートされていない状態に戻ることがわかりますが、列ヘッダーのソート矢印は、DataGrid がまだソートされているかのように残ります。これらの矢印をプログラムで削除するにはどうすればよいですか?

0 投票する
1 に答える
1432 参照

c# - 列挙可能なコレクションのデフォルトの CollectionView を置き換えるにはどうすればよいですか?

列挙型を ItemsSource などにバインドする場合、バインディングは列挙型の既定のビューを使用します。これは、次のコードを使用して取得できることがわかっています...

これは私たちにとって非常にうまく機能し、たとえば、さまざまなコレクションのデフォルト ビューに並べ替え機能を追加できるようになりました。

ただし、適切に機能するために特殊な ListCollectionView サブクラスを必要とする特殊な Collection クラスがあります。とはいえ、誰かがコレクションに直接バインドしたときに返されるように、デフォルトのビューを変更するにはどうすればよいでしょうか?

回避策として、カスタム ListCollectionView を保持する MainView という新しいプロパティを作成し、ItemsSource などをそれにバインドしますが、これは、コレクションのコンシューマーに、コレクションに直接バインドするのではなく、直接バインドするように明示的に指示する必要があることを意味します。 MainView プロパティを使用しないと、既定のビューが取得されます。標準はコレクションに直接バインドするだけであることを考慮すると、これは回避しようとしている潜在的な問題です。

繰り返しになりますが、独自の ListCollectionView サブクラスをカスタム コレクションの既定のビューとして指定するにはどうすればよいでしょうか。