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

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

wpf - CollectionView が設定されていませんか?

私は ICollectionView を数回使用しましたが、問題はありませんでした...しかし、これを機能させることはできません。

私のコンストラクタでは、次のことを行います。

私が違うと思うことの 1 つは、_viewModels に別の呼び出しを設定することです。たとえば、アプリのロード後にボタンを使用します。その時点で MyCollectionView.Refresh() を呼び出し、_viewModels にオブジェクトが含まれていても、MyCollectionView はまだ空です。

これは機能するはずですか?もしそうなら、何が欠けていて、何を探すことができますか?

0 投票する
0 に答える
39 参照

wpf - 基になる ICollectionView が実際に汚れているかどうかを確認するにはどうすればよいですか

さまざまなフォームで使用するデータ ナビゲーターとして機能する wpf ユーザー コントロールを構築しています。グリッドなどのフォーム上の他のコントロールと同様に、ビュー モデルから基になる ICollectionView をデータ ソースとして使用します。グリッド上のビューは次のように設定されています。

典型的なフォームは次のようになります。

ここに画像の説明を入力

今私ができるようにしたいのは、基になるビュー コレクションがいつダーティであるかを判断して、その情報を使用して、ナビゲーター コントロールの保存ボタンなどを無効にすることができるようにすることです。CurrentChanging と CollectionChanged の両方を試しました。私が考えていた前者は、2つの中でより有望であり、グリッドで新しい行を選択または作成すると起動しますが、セルの内容を変更しても起動しません。保存ボタンを有効にする前に、1 つまたは複数の行が実際にダーティであることを知りたいです。

ありがとう

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

c# - ICollectionView を使用した ObservableCollection の並べ替えが正しく機能しない

バグを生成するには、 で任意の項目を選択しますTopDataGrid。その結果、アイテムのコレクションが にロードされBottomDataGridます。このコレクションはName、私が指定したプロパティでソートされています! 次に、 で他の項目を選択しますTopDataGrid。その結果ItemsSourceBottomDataGridがリロードされます。そして今、コレクションは未分類です!コレクションは、コードで指定したとおりに見えます。さらに、_customerViewデバッガーで確認すると、ソートされたコレクションが表示されます。

andの代わりに UI 自体を更新するように明示的にコマンドを実行するためListOrderByandを使用できることはわかっています。しかし、これは適切なアプローチではないと思います。INotifyPropertyChangedObservableCollectionICollectionView

Win 7、.Net 4.0。コピーして貼り付けるだけです。

コード

アップデート

ClearSortDescriptionsOnItemsSourceChangeメソッドの並べ替えがクリアされ、再指定されないようです。これが問題だと思います。

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

c# - ICollectionView の現在の位置は -1 です

私はICollectionViewからObservableCollectionを持っています

mySpreadOrderCollectionは空ではありません。SourceCollectionカウントが 1であることがわかります

ICollectionView ウォッチ

しかし、なぜCurrentPosition-1であり、このためだと思いますが、 を にバインドしDataGrid ても何も表示されません。WorkingSpreadOrderCollevtionViewItemSourcce

ここで考えられるバグは何ですか?

================================================== ========

編集:次のとおりxaml bindingです。同じ内の別のプロパティが同じに正しくバインドされてDataContextいるため、正しいことは間違いありません。publicViewModelxaml

さらにColumns、データグリッドで自動生成されたものを見ることができますが、レコードを見ることができません。

==================================================

更新: ばかげたバグを見つけました。私はGetDefaultView2 回呼び出し、ビューの 2 つの異なるコピーが作成されたと考えたため、「2 つの」コピーに 2 つのフィルターを適用しました。2 番目のフィルタは、レコードが に表示されないようにしましたDataGrid。私が今行ったことは、以下のように新しいビューを作成することです。

0 投票する
0 に答える
173 参照

wpf - ViewModel、Model、および CollectionView との設計上の混乱

この質問は設計ヘルプに関連しています。その中で、私は問題と、私が考えたいくつかの解決策を、解決策についての私の意見とともに提示します。そして最後に、私が正しいと思う解決策です。私は自分のソリューションに対する検証または課題を求めています。長い投稿で申し訳ありません。

私はConfigActivityGroupクラス(モデル)を持っています。アクティビティのグループを表します。ユーザーはActivityGroups、グループの名前と文字列である複数のアクティビティを含む多数の を持つことができます。

ConfigActivityGroupVMCRUDのコマンドを提供するConfigActivityGroups

は、のConfigActivityGroupVMObservableList<ConfigActivityGroup> を保持しConfigActivityGroupsます。また、ObservableList<ConfigActivityGroup> の をConfigActivityGroupVM保持し、UI がアクセスする を提示します。CollectionViewSourceICollectionView

UI はまだ作成していませんがICollectionViewSource、ユーザーがアイテムをクリックできるリストにバインドする予定です。GroupName のテキスト ボックスと、最初のリストActivitiesActivityGroup隣接する の別のリストが表示されます。

ConfigActivityGroupによって提供される電流の概念があるので、これで問題ありませんICollectionView。current を使用ConfigActivityGroupして 2 番目の UI リストにバインドし、current で を表示ActivitiesできますConfigActivityGroup

問題:CRUD現在の のアクティビティ に対してコマンドを作成したい場合ConfigActivityGroup

が中にあり、ActivitiesそれらをUIに直接バインドする場合、UIにバインドできる「現在の」アクティビティの概念がないため、VMのコマンドで現在のアクティビティを削除できます現在のコマンド用。ConfigActivityGroupList<string>DeleteCurrentActivityCommand

私が持っていた最初の解決策は、VM で (ICollectionView を介して) を選択したときに、選択したアクティビティを VM の新しいConfigActivityGroupものにコピーすることでした(これには独自のとがあります)。次に、UI の 2 番目のリストを現在のアクティビティの ICollectionView にバインドすることができます。そのため、私のコマンドはアクティビティの ICollectionView を変更します。ただし、アクティビティを別のアクティビティ文字列に設定できない現在の新しいアクティビティを作成しようとすると、障害が発生しました(読み取り専用であるため)。ConfigActivityGroupObservableCollection<string>ViewSourceICollectionViewConfigActivityGroupConfigActivityGroupICollectionView.CurrentItem

ActivityStringその解決策の 1 つは、クラス内のアクティビティ文字列を 1 つの文字列にまとめることだと思いました。全体として、私はこの方法にあまり満足していませんでした。

私が考えた2番目の解決策List<string>は、 in を にConfigActivityGroupすることでしたObservableCollection<string>。これにより、VM が簡素化されます。モデルは非UIスレッドからマジック(MyCouch + CouchDB)を介してデータベースからロードされ、作成スレッドとは異なるスレッドからアクセスされるjson-deserialisationと(メモリからだと思います)問題が発生するため、このアプローチの使用をためらっていますObservableCollection. 多くのスレッドセーフな ObservableCollections の 1 つを使用するのはやり過ぎだと思いました。

この質問を書いているときに考えた3 番目の解決策List<string>は、アクティビティのモデルを に保持することでしたConfigActivityGroup。次に、ConfigActivityGroupがその で選択されると、アクティビティの をソースとして直接ICollectionView初期化します。そうすれば、UI はアクティビティに直接バインドでき、UI は実際のアクティビティ文字列の編集を処理できます。現在選択されているアクティビティの概念は残りますが、コマンドを使用して削除できます。CollectionViewSource/ICollectionList<string>

私は 3 番目のアプローチが正しいアプローチだと思いますが、コミュニティの意見を聞くことにオープンですこれは MVVM の私の最初の使用であり、責任を分離し、可能な限りコマンドを使用しようとしています。

追加データ:

  • ConfigActivityGroup がデータベースからロードされて VM に配置されると、UI を介して VM 自体以外のユーザーによって変更されることはありません。
0 投票する
1 に答える
611 参照

c# - ICollectionView でオブジェクトの子項目をフィルター処理する

ItemType というオブジェクトのコレクションがあり、それぞれに Item の子コレクションがあります。最上位のコレクションは ObservableCollection にラップされているため、ユーザーがコレクションに何かを追加または削除すると応答します。これは TreeView にバインドされているため、各 ItemType はその子アイテムを下に表示します。

私ができるようにしたいのは、フィルターを使用して、削除済みに設定されている子項目オブジェクトを取り除くことです。Filter にはブール述語が必要であり、もちろん最上位の ItemType のみが渡されるため、苦労しています。例:

下にある項目ではなく、ItemType を削除しているため、良くありません。

私はこれをやってみました:

しかし、これは、実際のフィルターを実行するのではなく、基になるコレクションからアイテムを実際に削除することになります。

子コレクションをフィルタリングする方法はありますか?