問題タブ [collectionviewsource]
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 - IValueConverter によって生成されたプロパティで CollectionView のグループを並べ替える
CollectionViewSource のグループ化を使用して、詳細のコレクションの仮想「集約」ビューを表示しています。基本的にここに見られるサンプル: ListBox Grouping, Sorting, Subtotals and Collapsible Regions
例の関連部分を要約すると、次のように、グループ化により、ValueConverter を介して詳細から集約されたプロパティを公開できます。
上記の TextBlock は GroupItem のバインディングに直接バインドされているため、コンバーターは全体CollectionViewGroup
とその子を受け取り、詳細にドリルダウンしてグループ内の項目の小計を合計できることに注意してください。
問題は、この値自体はプロパティではないため、グループを小計で並べ替えることができるかどうかです。
これは明らかに では処理できませんSortDescription
。実装CustomSort
を取る ListCollectionView のプロパティをこのような状況で使用できるという提案を見てきましたが、方法がわかりません。メソッドは、グループ化に関係なく、詳細項目のペアを受け取ります。その点。IComparer
Compare()
これらのグループを独自のエンティティにする必要なく、これらのグループを並べ替える方法はありますか (つまり、概要レベルで CollectionView を持ち、詳細レベルで別の CollectionView を持つ)。
wpf - カスタム コントロール コンボボックス内の項目をグループ化する方法は?
xaml を使用してカスタム コントロール コンボボックスの項目をグループ化しようとしましたが、少し行き詰まりました。私は読み回して、必要な結果を生成する次のコードを見つけましたが、すべてのコードを GroupedImageComboBox コントロールに移動したいと思います。
この領域から stackpanel と itemscontrol の使用を削除し、それらを GroupedImageComboBox 内に配置できるようにしたいと考えています。これを達成する方法はありますか?
前もって感謝します。
編集 1.
私はテンプレートで遊んでいて、DropDown グリッド内で collectionview 操作を行うことができるはずだと感じています - どうすればよいかわかりません....
wpf - wpfデータバインディングでレコードを挿入する方法は?
wpfは初めてなので、ご容赦ください。
「プロファイル」レコードを管理するためのウィンドウを作成しました
ナビゲーションと更新が機能している間
挿入もうまくいかないようです
ここに非常に単純なコードがあります
[追加]を押すと、新しい空のレコードが表示されます。入力すると、プロファイルを表示するonformリストボックスがあり、そこにリストされるため、コレクションにそのレコードが表示され、実際にリストに添付されます。ただし、savechangesコマンドはそれをデータベースに挿入しません
挿入時に検証エラーが発生する可能性がありますが、その場合は何らかの兆候が見られますよね?今、それはただ静かに失敗しています。まるで私が変更をコミットすることに縛られなかったかのように
助けてくれてありがとう
wpf - マスター詳細: 詳細レコードを追加するにはどうすればよいですか?
これは簡単です。エンティティ フレームワークのマスター/詳細関係がある場合、コードに詳細レコードを追加するにはどうすればよいですか? Book という名前の親テーブル/エンティティと、ChapterTitle フィールド/プロパティを含む Chapter という名前の子/ルックアップ テーブル/エンティティがあるとします。ユーザーが ChapterTitles を TextBox に入力してから、[章のタイトルを追加] ボタンをクリックできるようにします。新しい ChapterTitle は、CollectionViewSource を介して Chapters テーブル/エンティティにバインドされた ListView に表示されます。
私は MVVM を使用していません (MVVM に関する回答は求めていません)。この Julie Lerman の投稿で説明されているように、データ ソース ウィンドウからドラッグ アンド ドロップを使用しています。私の場合の違いは、データグリッドを介して詳細を表示および追加する代わりに、ユーザーが新しい章のタイトルを追加するために ListView とテキストボックスを使用していることです。
ドラッグ アンド ドロップにより、XAML に次の 2 つの CollectionViewSource エントリが作成されました。
自動生成されたコードは次のようになります。
ユーザーの章のタイトルをテキスト ボックスから取得し、詳細の CollectionViewSource (bookChaptersViewSource) を介して新しい詳細レコードとして追加するには、button_click イベントにどのコードを追加する必要がありますか? これは非常に単純だと思いますが、あまりにも多くの時間を試してみましたが、運がありませんでした。前もって感謝します!
wpf - wpf mvvm threading.Timer および TimerCallback の問題
ViewModel コンストラクターが TimerCallback でタイマーを設定する MVVM フレームワークに対して開発された WPF アプリケーションがあります。
TimerCallback は ObservableCollection を取得し、それを VM のフィールドに渡します。
Source プロパティが ObservableCollection に設定されている CollectionViewSource があります。コレクションのフィルタリングを有効にしたいので、CollectionViewSource を使用しています。
TimerCallback が ObservableCollection をローカル フィールドに渡そうとすると、CollectionViewSource の Source プロパティに例外 {"別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。"} が発生することがわかりました。
例外は理解できますが、2 つの問題があります。
- この問題を回避するにはどうすればよいですか?
- さらに重要なのは、CollectionViewSource を使用している場合にのみこの問題が発生するのはなぜですか? CollectionViewSource を削除して ObservableCollection をパブリック プロパティにすると、そのような例外は発生しません。
どんな助けでも大歓迎です!ありがとう、ドラミー
wpf - ObservableCollection から WPF ListBox ItemsSource を切り替えるMVVM で実行時に CollectionViewSource に
検索を開始するとデータが非同期に読み込まれるリストボックスを含む WPFView にバインドされた MVVM プロジェクトに ViewModel があります。私の検索結果のデータには、別の日に購入された同じ商品の価格が含まれています。リストボックス内のアイテムを価格の昇順で並べる必要があります。BackgroundWorker がアイテムを返すとすぐに、アイテムがリストボックスに非同期に追加され、価格順に並べ替えられます。これにより、最高の価格が見つかるとすぐに表示されます。
私が見つけたより良い解決策は、ViewModel に ObservableCollection を配置し、それを ListBox の ItemsSource にバインドすることです。非同期検索を開始する BackgroundWorker があります。検索を行うオブジェクトの DataReceived EventHandler にサブスクライブし、次のように UI に通知します。
ディスパッチャ経由
これは私には問題ないように思えますが、必要に応じてアイテムを注文しないため、 CollectionViewSource が必要なことを簡単な方法で正確に実行することがわかりました。
ここに問題があります:
リストボックスのデータ コンテキストを CollectionViewSource に設定すると、設計時の処理能力が低下します。リスト ボックスに設計時のデータが表示され続けますが、Blend の [データ] タブで DataContext が失われます。
だから私は少し汚れていると思うことをしました: ax:Name 属性で ListBox に名前を付け、MainWindow.xaml にコードを少し追加して、実行時に名前付きリストボックスのデータソースを次のように交換しました。
それは罪とみなすことができると思いますか。
wpf - WPFを使用したデータバインディング-入力時にCollectionViewSourceを更新
このMSDNWalktroughの指示に従って、サンプルプロジェクトを作成しました。サンプルを少し変更して、2つの追加のTextBoxコントロールと1つのボタンを作成しました。
それはそれがどのように見えるかです:
コードファーストアプローチとDbContextの派生クラスをコード生成アイテムとして使用して、単純なモデルを作成しました。
その後、作成されたデータソースを使用しました。
「名前」-TextBoxは読み取り専用です。「検索」-ボタンが押されたときに、ユーザーがIDを入力して検索できるようにしたい。したがって、指定されたIDが見つかった場合は、「名前」-TextBoxを更新する必要があります。DataGridは実際のコードでは必要ないため、あまり気にしません。
CollectionViewSource.View.CurrentItemプロパティは読み取り専用であるため、CollectionViewSourceを更新して入力を検証する方法がわかりません。
編集:それは私の(ほぼ完全にデザイナーが生成した)コードです:
c# - ComboBox の CollectionViewSource へのデータバインディング時に CurrentItem の TwoWay バインディングを維持する方法
単純な VM クラスがあるとしましょう
たとえば、次のように ComboBox に正常にデータバインドするだけで十分です。
Person がEquals
オーバーロードされていることに注意してください。ViewModel で CurrentPerson 値を設定すると、コンボボックスの現在の項目に新しい値が表示されます。
ここで、ビューに並べ替え機能を追加したいとしましょうCollectionViewSource
コンボボックス アイテムのソース バインディングは次のようになります。
そして、それは実際にソートされます(さらにアイテムを追加すると、明らかに表示されます)。
ただし、CurrentPerson
現在 VM を変更すると (以前は CollectionView を使用せずにクリア バインディングを使用すると正常に動作していました)、この変更はバインドされた ComboBox に表示されません。
その後、VM から CurrentItem を設定するには、何らかの方法でビューにアクセスし (MVVM で ViewModel からビューに移動しないでください)、MoveCurrentTo
メソッドを呼び出してビューに currentItem の表示を強制的に変更する必要があると思います。
そのため、追加のビュー機能 (ソート) を追加することで、期待される動作ではないと思われる既存の viewModel への TwoWay バインディングが失われました。
ここで TwoWay バインディングを保持する方法はありますか? あるいは、私が間違ったことをしたのかもしれません。
編集:実際には、CurrentPerson セッターを次のように書き換えると、状況はより複雑になります。
それは動作し
fine
ます!
そのバグのある動作、または説明はありますか? オーバーロードされていても、いくつかの理由で、person オブジェクトの参照の等価性Equals
が必要です。
参照の等価性が必要な理由が本当にわからないので、メソッドがオーバーロードされているときに通常のセッターが機能しない理由を説明できる人に報奨金Equal
を追加しています。これは、それを使用する「修正」コードで明確に見られます
silverlight - viewSourceが静的リソースの場合、CollectionViewSourceSourceプロパティはいつ設定されますか
XAMLで次のCollectionViewSource定義を取得しました。
このCVSにバインドされたコンボボックスを取得し、次のようなコードからビューにアクセスしたいと思います。
ただし、コンストラクターでアクセスしようとしてもInitializeComponent()
、Loaded event
ハンドラーのビューとソースはまだnull
です。
バインディングがすでに行われているにもかかわらず、アプリケーションがブラウザーに表示され、ブレークポイントをどこかに置いた場合、ビューとソースはnullではなくなります。
では、ソースはいつ正確に設定されますか?アプリケーションをロードする段階で、どこからビューにアクセスできますか?
静的リソースバインディングはいつ設定されますか?これは、実際にはビューソースに関するものではない一般的なバインディングの質問ですか?
treeview - コード内のTreeViewとHierarchicalDataTemplate
TreeView
さまざまなプロパティを持つオブジェクトのネストされていないリストからのみコードを設定しようとしています。SortDescriptions
とを設定しましたが、グループGroupDescriptions
に設定する方法がわかりません。HierarchicalDataTemplate
CollectionViewSource
誰かが私にコードのみの例を教えてもらえますか?
私が持っている:
...そしてその時点で何をすべきかほとんどわかりません。TreeView
動物を表示するために拡張されるカテゴリを表示したかったのです。
ありがとう。