問題タブ [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.
wpf - CollectionView が設定されていませんか?
私は ICollectionView を数回使用しましたが、問題はありませんでした...しかし、これを機能させることはできません。
私のコンストラクタでは、次のことを行います。
私が違うと思うことの 1 つは、_viewModels に別の呼び出しを設定することです。たとえば、アプリのロード後にボタンを使用します。その時点で MyCollectionView.Refresh() を呼び出し、_viewModels にオブジェクトが含まれていても、MyCollectionView はまだ空です。
これは機能するはずですか?もしそうなら、何が欠けていて、何を探すことができますか?
wpf - 基になる ICollectionView が実際に汚れているかどうかを確認するにはどうすればよいですか
さまざまなフォームで使用するデータ ナビゲーターとして機能する wpf ユーザー コントロールを構築しています。グリッドなどのフォーム上の他のコントロールと同様に、ビュー モデルから基になる ICollectionView をデータ ソースとして使用します。グリッド上のビューは次のように設定されています。
典型的なフォームは次のようになります。
今私ができるようにしたいのは、基になるビュー コレクションがいつダーティであるかを判断して、その情報を使用して、ナビゲーター コントロールの保存ボタンなどを無効にすることができるようにすることです。CurrentChanging と CollectionChanged の両方を試しました。私が考えていた前者は、2つの中でより有望であり、グリッドで新しい行を選択または作成すると起動しますが、セルの内容を変更しても起動しません。保存ボタンを有効にする前に、1 つまたは複数の行が実際にダーティであることを知りたいです。
ありがとう
c# - ICollectionView を使用した ObservableCollection の並べ替えが正しく機能しない
バグを生成するには、 で任意の項目を選択しますTopDataGrid
。その結果、アイテムのコレクションが にロードされBottomDataGrid
ます。このコレクションはName
、私が指定したプロパティでソートされています! 次に、 で他の項目を選択しますTopDataGrid
。その結果ItemsSource
、BottomDataGrid
がリロードされます。そして今、コレクションは未分類です!コレクションは、コードで指定したとおりに見えます。さらに、_customerView
デバッガーで確認すると、ソートされたコレクションが表示されます。
andの代わりに UI 自体を更新するように明示的にコマンドを実行するためList
にOrderBy
andを使用できることはわかっています。しかし、これは適切なアプローチではないと思います。INotifyPropertyChanged
ObservableCollection
ICollectionView
Win 7、.Net 4.0。コピーして貼り付けるだけです。
コード
アップデート
ClearSortDescriptionsOnItemsSourceChange
メソッドの並べ替えがクリアされ、再指定されないようです。これが問題だと思います。
c# - ICollectionView の現在の位置は -1 です
私はICollectionView
からObservableCollection
を持っています
mySpreadOrderCollection
は空ではありません。SourceCollection
カウントが 1であることがわかります
しかし、なぜCurrentPosition
は-1
であり、このためだと思いますが、 を にバインドしDataGrid
ても何も表示されません。WorkingSpreadOrderCollevtionView
ItemSourcce
ここで考えられるバグは何ですか?
================================================== ========
編集:次のとおりxaml
binding
です。同じ内の別のプロパティが同じに正しくバインドされてDataContext
いるため、正しいことは間違いありません。public
ViewModel
xaml
さらにColumns
、データグリッドで自動生成されたものを見ることができますが、レコードを見ることができません。
==================================================
更新: ばかげたバグを見つけました。私はGetDefaultView
2 回呼び出し、ビューの 2 つの異なるコピーが作成されたと考えたため、「2 つの」コピーに 2 つのフィルターを適用しました。2 番目のフィルタは、レコードが に表示されないようにしましたDataGrid
。私が今行ったことは、以下のように新しいビューを作成することです。
wpf - ViewModel、Model、および CollectionView との設計上の混乱
この質問は設計ヘルプに関連しています。その中で、私は問題と、私が考えたいくつかの解決策を、解決策についての私の意見とともに提示します。そして最後に、私が正しいと思う解決策です。私は自分のソリューションに対する検証または課題を求めています。長い投稿で申し訳ありません。
私はConfigActivityGroup
クラス(モデル)を持っています。アクティビティのグループを表します。ユーザーはActivityGroups
、グループの名前と文字列である複数のアクティビティを含む多数の を持つことができます。
ConfigActivityGroupVM
CRUDのコマンドを提供するConfigActivityGroups
は、のConfigActivityGroupVM
ObservableList<ConfigActivityGroup> を保持しConfigActivityGroups
ます。また、ObservableList<ConfigActivityGroup> の をConfigActivityGroupVM
保持し、UI がアクセスする を提示します。CollectionViewSource
ICollectionView
UI はまだ作成していませんがICollectionViewSource
、ユーザーがアイテムをクリックできるリストにバインドする予定です。GroupName のテキスト ボックスと、最初のリストActivities
にActivityGroup
隣接する の別のリストが表示されます。
ConfigActivityGroup
によって提供される電流の概念があるので、これで問題ありませんICollectionView
。current を使用ConfigActivityGroup
して 2 番目の UI リストにバインドし、current で を表示Activities
できますConfigActivityGroup
。
問題:CRUD
現在の のアクティビティ に対してコマンドを作成したい場合ConfigActivityGroup
。
が中にあり、Activities
それらをUIに直接バインドする場合、UIにバインドできる「現在の」アクティビティの概念がないため、VMのコマンドで現在のアクティビティを削除できます現在のコマンド用。ConfigActivityGroup
List<string>
DeleteCurrentActivityCommand
私が持っていた最初の解決策は、VM で (ICollectionView を介して) を選択したときに、選択したアクティビティを VM の新しいConfigActivityGroup
ものにコピーすることでした(これには独自のとがあります)。次に、UI の 2 番目のリストを現在のアクティビティの ICollectionView にバインドすることができます。そのため、私のコマンドはアクティビティの ICollectionView を変更します。ただし、アクティビティを別のアクティビティ文字列に設定できない現在の新しいアクティビティを作成しようとすると、障害が発生しました(読み取り専用であるため)。ConfigActivityGroup
ObservableCollection<string>
ViewSource
ICollectionView
ConfigActivityGroup
ConfigActivityGroup
ICollectionView.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/ICollection
List<string>
私は 3 番目のアプローチが正しいアプローチだと思いますが、コミュニティの意見を聞くことにオープンです。これは MVVM の私の最初の使用であり、責任を分離し、可能な限りコマンドを使用しようとしています。
追加データ:
- ConfigActivityGroup がデータベースからロードされて VM に配置されると、UI を介して VM 自体以外のユーザーによって変更されることはありません。
c# - ICollectionView でオブジェクトの子項目をフィルター処理する
ItemType というオブジェクトのコレクションがあり、それぞれに Item の子コレクションがあります。最上位のコレクションは ObservableCollection にラップされているため、ユーザーがコレクションに何かを追加または削除すると応答します。これは TreeView にバインドされているため、各 ItemType はその子アイテムを下に表示します。
私ができるようにしたいのは、フィルターを使用して、削除済みに設定されている子項目オブジェクトを取り除くことです。Filter にはブール述語が必要であり、もちろん最上位の ItemType のみが渡されるため、苦労しています。例:
下にある項目ではなく、ItemType を削除しているため、良くありません。
私はこれをやってみました:
しかし、これは、実際のフィルターを実行するのではなく、基になるコレクションからアイテムを実際に削除することになります。
子コレクションをフィルタリングする方法はありますか?