問題タブ [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.
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クラスがあります...
wpf - WPF TabControl - ItemTemplateSelector *および* ContentTemplateSelectorが必要ですか?
そのため、WPF アプリのメイン ユーザー コントロールとして、TabControl
いくつかの異なるビュー (基本的にはデータ入力用のフォーム) とその基になるビュー モデル (基本的には ORM マッピング) をサポートします。
ContentTemplateSelector
選択したアイテムの正しいコンテンツ ビューを破棄するために を作成しました 。
だから私の質問は:
ItemTemplateSelector
タブ ヘッダー タイトルとして機能する、基になるビュー モデルから正しいプロパティを選択するために を作成する必要がありますか?
または、各ビュー モデルのプロパティを DisplayTitle などと呼ばれる別のプロパティに割り当てて、それを で使用する必要がありItemTemplate
ますか?
より一般的には、単一のセレクターの下で ItemTemplate と ContentTemplate の「選択」を組み合わせる方法はありますか?
c# - WPF ContentTemplateSelector が ListboxSelectionChanged に間に合うようにテンプレートを変更しない
意図したとおりに正常に変更されている ContentTemplateSelector があります。これは、一連のテキストブロックを含むリストボックスにあり、リストボックス内の項目を選択すると、その項目のテンプレートがテキストボックスを持つように変更されます (編集できるようになります)。
私が抱えている問題は、テキストボックスにフォーカスがないことです。これは少し面倒です。
そのため、リストボックスの添付プロパティを実装しようとしました。これは、設定するとイベントハンドラを SelectionChanged イベントに添付します。そこから、ドリルダウンしてテキストボックスを見つけ、フォーカスを設定したいと考えています。
ただし、TemplateSelector が適切なテンプレート (テキスト ボックスのあるテンプレート) をまだ選択していないように思われる問題が発生しました。実際、テンプレートは NULL です。これにより、既に TextBlock テンプレートが削除されており、すぐに正しいテンプレートが選択されると思いますが、それはこの SelectionChanged イベント全体が完了した後でのみです。
私の質問は、この DataTemplate に ContentTemplateSelector で適切なテンプレートを選択するように強制する方法を知っていますか、または ListboxItem がフォーカスを取得したときに Template 内でこのテキストボックスを選択する方法についての別のアイデアですか?
ContentPresenter を取得する方法は次のとおりです (選択されている ListboxItem から)。
編集:この後にcp.ApplyTemplate()を追加しましたが、何も変わりません。
ただし、この時点ではcp.ContentTemplateは null です。
wpf - ContentSelector WPF
ViewModel の状態に応じて、ボタン内に別のコンテンツ テンプレートを設定して、トグル ボタンのように動作させたいと考えています。コードをかなり単純化しましたが、各データ テンプレートでは、ボタンのコンテンツが異なるパス ジオメトリをテキストブロックと共に描画します。
ContentSelector クラス:
編集:ボタンにプロパティを追加してコンテンツを設定しました。ここで、「状態」はビューモデルのブール値であり、コンバーターはビューモデルの状態に基づいて「T」または「F」を返すだけです。
XAML:
ContentSelector クラスのブレークポイントに到達できないようです。つまり、ContentSelector クラスで対応する DataTemplate を返すように変更すると、ボタンのコンテンツが 'T' または 'F' に変更されますが、アプリケーションを実行すると、ContentSelector にヒットすることはありません。ボタンは完全に空です。
なぜこれが起こるのかについてのアイデアはありますか?ボタンのコンテンツを ViewModel の State に設定し、それをコンバーターを使用してブール値に変更しようとしましたが、ContentSelector をトリガーするようにボタンのコンテンツを設定する必要があると考えましたが、うまくいきませんでした。
c# - パラメータを ContentTemplateSelector に渡すには?
TemplateSelector
国に基づいてテンプレートを選択する必要があります。だから、私がバインドする国MyDataTemplateSelector:SelectTemplate
を受け取るために。問題は、返されたテンプレートがまたはにバインドされていないことです。選択したテンプレートがViewModelにバインドされていないため、タンプレートのバインドされたプロパティにアクセスできないために発生すると思います。Content
ContentPresenter
CountriesComboBox
City
Streets
DataContext
以下のコードを試してみましたが、私の意見では、Content
ofContentPresenter
がバインドされているのにバインドされCountriesComboBox
ていないため{Binding}
、機能しません。しかし、にバインドするContent
と、 TemplatrSelector{Binding}
の選択されたアイテムにアクセスできなくなります。CountriesComboBox
それで、どうすればいいですか?