問題タブ [contenttemplateselector]

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 投票する
0 に答える
2257 参照

wpf - Binding の変更時に ContentTemplateSelector が再評価されない

序文

データグリッド セルの読み込み時間を短縮するために、2 つの異なるデータ DataTemplate を作成しました。1 つは基本的にテキストブロックで、もう 1 つはより高価な UserControl です。ロード時に、データ テンプレート セレクターは、安価なコントロールと高価なコントロールをロードする必要があるかどうかを決定します。これにより、最初のロード/パフォーマンスが最大 12 秒から最大 2 秒に増加します。これは、ほとんどのセルが複雑である必要がなく、シンプルなテンプレートをロードするのにかかる時間は、他のテンプレートと比べてほとんどありません。

とにかく、負荷がかかるとうまくいきます。しかし、下のデータを変更すると、変更されたプロパティが発生し、DataTemplateSelector が SelectTemplate() を再度呼び出して、使用するデータ テンプレートを再評価する必要がありますが、そうではありません。

興味深いのは、上記の失敗の後、セルをクリックすると SelectTemplate() が呼び出され、必要に応じて DataTemplate が反転することです。

コード

DataTemplate Selector によって選択されたより複雑なコントロールは、DataTemplateSelector なしでテストしたので、完全に機能することに注意してください。また、Binding Intervals[0].Self に関する注意 - self は、「this」を返すプロパティです。これは、私がバインドしているオブジェクトの参照です。その唯一の理由は、(Self が発生したとき) to DataTemplate の再評価を強制します。どうやらそれはうまくいきません。

質問

データ テンプレートを強制的に再評価するにはどうすればよいですか?

サポートコード*

これは私のリソース dict です (派手なものは何もありません)

そして明らかに、SelectTemplateをオーバーライドして正常に動作するMyTemplateSelectorクラスがあります...

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

wpf - WPF TabControl - ItemTemplateSelector *および* ContentTemplateSelectorが必要ですか?

そのため、WPF アプリのメイン ユーザー コントロールとして、TabControlいくつかの異なるビュー (基本的にはデータ入力用のフォーム) とその基になるビュー モデル (基本的には ORM マッピング) をサポートします。

ContentTemplateSelector選択したアイテムの正しいコンテンツ ビューを破棄するために を作成しました 。

だから私の質問は:

ItemTemplateSelectorタブ ヘッダー タイトルとして機能する、基になるビュー モデルから正しいプロパティを選択するために を作成する必要がありますか?

または、各ビュー モデルのプロパティを DisplayTitle などと呼ばれる別のプロパティに割り当てて、それを で使用する必要がありItemTemplateますか?

より一般的には、単一のセレクターの下で ItemTemplate と ContentTemplate の「選択」を組み合わせる方法はありますか?

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

c# - WPF ContentTemplateSelector が ListboxSelectionChanged に間に合うようにテンプレートを変更しない

意図したとおりに正常に変更されている ContentTemplateSelector があります。これは、一連のテキストブロックを含むリストボックスにあり、リストボックス内の項目を選択すると、その項目のテンプレートがテキストボックスを持つように変更されます (編集できるようになります)。

私が抱えている問題は、テキストボックスにフォーカスがないことです。これは少し面倒です。

そのため、リストボックスの添付プロパティを実装しようとしました。これは、設定するとイベントハンドラを SelectionChanged イベントに添付します。そこから、ドリルダウンしてテキストボックスを見つけ、フォーカスを設定したいと考えています。

ただし、TemplateSelector が適切なテンプレート (テキスト ボックスのあるテンプレート) をまだ選択していないように思われる問題が発生しました。実際、テンプレートは NULL です。これにより、既に TextBlock テンプレートが削除されており、すぐに正しいテンプレートが選択されると思いますが、それはこの SelectionChanged イベント全体が完了した後でのみです。

私の質問は、この DataTemplate に ContentTemplateSelector で適切なテンプレートを選択するように強制する方法を知っていますか、または ListboxItem がフォーカスを取得したときに Template 内でこのテキストボックスを選択する方法についての別のアイデアですか?

ContentPresenter を取得する方法は次のとおりです (選択されている ListboxItem から)。

編集:この後にcp.ApplyTemplate()を追加しましたが、何も変わりません。

ただし、この時点ではcp.ContentTemplateは null です。

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

wpf - ContentSelector WPF

ViewModel の状態に応じて、ボタン内に別のコンテンツ テンプレートを設定して、トグル ボタンのように動作させたいと考えています。コードをかなり単純化しましたが、各データ テンプレートでは、ボタンのコンテンツが異なるパス ジオメトリをテキストブロックと共に描画します。

ContentSelector クラス:

編集:ボタンにプロパティを追加してコンテンツを設定しました。ここで、「状態」はビューモデルのブール値であり、コンバーターはビューモデルの状態に基づいて「T」または「F」を返すだけです。

XAML:

ContentSelector クラスのブレークポイントに到達できないようです。つまり、ContentSelector クラスで対応する DataTemplate を返すように変更すると、ボタンのコンテンツが 'T' または 'F' に変更されますが、アプリケーションを実行すると、ContentSelector にヒットすることはありません。ボタンは完全に空です。

なぜこれが起こるのかについてのアイデアはありますか?ボタンのコンテンツを ViewModel の State に設定し、それをコンバーターを使用してブール値に変更しようとしましたが、ContentSelector をトリガーするようにボタンのコンテンツを設定する必要があると考えましたが、うまくいきませんでした。

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

c# - パラメータを ContentTemplateSelector に渡すには?

TemplateSelector国に基づいてテンプレートを選択する必要があります。だから、私がバインドする国MyDataTemplateSelector:SelectTemplateを受け取るために。問題は、返されたテンプレートがまたはにバインドされていないことです。選択したテンプレートがViewModelにバインドされていないため、タンプレートのバインドされたプロパティにアクセスできないために発生すると思います。ContentContentPresenterCountriesComboBoxCityStreetsDataContext

以下のコードを試してみましたが、私の意見では、ContentofContentPresenterがバインドされているのにバインドされCountriesComboBoxていないため{Binding}、機能しません。しかし、にバインドするContentと、 TemplatrSelector{Binding}の選択されたアイテムにアクセスできなくなります。CountriesComboBox

それで、どうすればいいですか?