問題タブ [datatemplateselector]

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 に答える
112 参照

wpf - WPF でさまざまなサイズのアイテムにさまざまなパネルを使用する

コンテナのアイテム数に異なるパネルを使用したいと考えています。これを達成する方法はありますか?

たとえば、PanelA5 個未満のアイテムに使用したいPanelB、それ以上のアイテムに使用したい。

DataTemplateSelectorこの目的のためにクラスを実装しましたが、うまくいくようです。しかし、UI 要素の描画に関しては、結果が得られず、空白の白い画面が表示されます。

以下は、私の XAML コードのテンプレートの 1 つです。2番目のものはまったく同じですがPanelB.

リソースの後に、次の ContentControl セクションがあります。

ありがとう

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

windows-phone-8 - DataTemplate 内の要素を置き換える

次のような ItemTemplate を持つ LongListSelector があります。

このTemplateSelectorクラスを使用して、項目タイプに応じて ItemTemplate 内のすべてのコンテンツを変更する方法を知っています。

私の質問は、テンプレート セレクターを使用して、変化する 1 つの項目のみを変更し、他の多くの要素を繰り返す必要がないようにする方法です。

私は aContentControlContentPresenterinside deを使用しようとしましたStackPanelが、成功しませんでした

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

c# - WPF: ContentControl のコンテンツを変更すると、新しいコンテンツ オブジェクトがロードされたイベントを発生させない

問題:

ContentControl のコンテンツを変更した後、DataTemplateSelector からの DataTemplate が適用され、すべてのビジュアル レイアウトが完了した (つまり、新しいコンテンツが読み込まれた) 時点にフックできません。

設定:

ContentControlを拡張する「KeyboardHost」と呼ばれるカスタム コントロール。

ContentControl.Contentは、2 つのバインドされたプロパティをタイプ 'KeyboardCriteria' のオブジェクトに結合する値コンバーターを介して、2 つの通知プロパティに (マルチバインディングを使用して) バインドされます。

「KeyboardCriteria」はパブリック クラスですが、Initialized、Loaded などのイベントにフックできるように、これを FrameworkElement、Control、および UserControl にしようとしました。

ContentControl.ContentTemplateSelectorは、ContentControl.Content (「KeyboardCriteria」) に基づいて DataTemplate を返すカスタム セレクター クラス (以下) です。

ContentControl.ContentTemplateSelector の DataTemplates はセレクターのプロパティであり、MainView のリソース セクションで初期化および割り当てられます。

試み:

次の ContentControl イベントをアタッチ/オーバーライドしました:

次の「KeyboardCriteria」(FrameworkElement として定義) イベントをアタッチ/オーバーライドしました。

所見:

始めるとき:

バインドされた基準プロパティの 1 つを変更する場合 (つまり、新しい KeyboardCriteria オブジェクトを作成する場合):

注意: ContentControl.Content オブジェクト ('KeyboardCriteria') に Loaded イベントがありません。

次のステップ:

これは既に CustomControl であるため、DataTemplateSelector を使用するという考えを完全に破棄し、ContentControl に選択ロジックを組み込むことにします。これが問題の一部であると思われるため、コンテンツを手動で作成 (および入力) することで、現在選択ロジックで使用している DataTemplates の使用を回避できることを願っています。

...

コードサンプル:

MainViewModel:

最初は null 以外の値を持つ「Keyboard」プロパティを公開します。

メインビュー:

KeyboardCriteriaValueConverter:

Convert メソッドのみ。ConvertBack は NotImplementedException をスローします。

ロジックが単純化され、値の型やカウントなどをチェックするための余分なロジックが削除されました。

KeyboardDataTemplateSelector:

あなたが提供できる洞察に感謝します。

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

c# - 私の場合、WPF が適切な DataTemplate を選択しないのはなぜですか?

ViewModel には、IPage インターフェイス (私が作成したインターフェイス) を実装する 4 つのクラスがあります。私のアプリの ViewModel には、IPage タイプの CurrentPage プロパティがあります。

私のアプリのビュー レイヤーには、コンテンツが CurrentPage プロパティにバインドされている ContentControl があります。

したがって、次のコードを使用すると、WPF は正しい DataTemplate を見つけられません。

しかし、DataTemplate を ContentControl.ContentTemplate として 1 つだけ配置すると、正しく適用されます。

次に、これらの DataTemplates をリソースとして戻す場合は、それらにキーを与え、DataTemplateSelector を作成して追加します

このように DataTemplateSelector を使用して ControlTemplate に:

次に、適切な DataTemplate が選択されます。

この場合、DataTemplates を要素リソースに配置すると、WPF が適切な DataTemplate を選択しないのはなぜですか?

ありがとうございました

注意: フレームワーク 3.5 の使用

編集: 2 番目の問題に気付きました: DataTemplates 内の DataContext が null です。何故ですか?CurrentPage を DataContext として使用しないのはなぜですか? これは、ContentTemplate も直接設定した場合です。WPF は、インターフェイスの型付きプロパティへのバインディングを好まないようです。

編集 2: OperationListPageV の DataContext をコンストラクターで明示的に設定し、TemplateSelector を使用するとすべてが機能しますが、なぜそれらを使用する必要があるのですか?

編集 3: 役立つ場合は、ViewModel の完全なコード:

アプリのビューモデル

ViewModelを表示する予定だったページ

表示する予定だったページのViewレイヤー(OperationListPageV)

さらにコードが必要な場合は、それを要求してください。ありがとうございました!

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

c# - データWP 8.1に応じて異なるリストボックスアイテムスタイル

アイテムが入力されたリストボックスがあります。各アイテムには、次のようなオブジェクトが含まれています。

IsOuter値はブール値であるため、これらの項目に異なるスタイルを適用したいと思います。DataTemplateSelectorについて聞いたことがありますが、それが実際にどのように機能するかを実際に理解することはできません..誰かがそれを行う方法を教えてくれますか?

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

xaml - 選択した GridView アイテムの DataTemplate を変更する方法

GridView アイテムの次のデータ テンプレートがあります。GridViewで選択したアイテムのデータテンプレートを変更したい。

girdView のデータ テンプレート

選択したアイテムの DataTemplate を次のように変更したいユーザーによって、この GridView で任意のアイテムが選択されます。

テンプレートセレクターについて読みました。ただし、バインド中にテンプレートが選択されます。

選択したアイテムのデータ テンプレートを変更する方法はありますか?

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

c# - ネストされたコントロールの DataTemplateSelector が選択項目に対して呼び出されない

次の問題があります: 非常にうまく機能する MultiSelectComboBox を作成しました:

および分離コード:

今、すべてが魅力のように機能しますが、この MultiSelectComboBox を内部に使用して新しいユーザーコントロールを作成したい場合、「SelectedItem」(トグルボタンの内部に表示されるもの) の DataTemplateSelector を呼び出しません。コントロール内で使用すると、Content-properties が異なるいくつかの ContentPresenter があることがわかりました。エラーは何ですか?別のコントロール内に配置すると、動作が異なるのはなぜですか?

2 番目のコントロールのコード:

および XAML:

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

c# - WPF DataTemplate セレクターが機能しない

私は Treeview コントロールに取り組んでいます。項目コントロールは、データ構造の値に応じてテキスト ボックスとコンボ ボックスのセットを動的に表示する必要があります。ArgumentTypeTemplateSelector の変換コードが実行されます。ただし、Textbox とコンボは表示されません。誰か親切に助けてください。ありがとうございました。

ツリー ビュー (xaml)

リソースディクショナリ(xaml)で

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

wpf - DataTemplateSelector は親の ActualWidth を取得します

Pages ActualWidth に応じて、異なる DataTemplates を ListBox に設定しようとしています。本質的に、空のスペースを埋めるために、より多くのデータを表示したいと考えています。

それ自体が定義するアイテムは、使用する DataTemplate のパラメーターでもあるため、DataTemplateSelector を使用するのが最善の方法だと思います。

DependencyProperty を DataTemplateSelector に追加する方法が見つからないため、これを達成するための最良の方法は何でしょうか。