問題タブ [datatemplate]
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 - WPF で DataTemplate のバインディングをどのように除外できますか?
DataTemplate
再利用したいものがあります。除外したい部分はバインディングです。変更されるのはバインディングだけだからです。私DataTemplate
の見た目は大体こんな感じです。(実際にはもっとたくさんありますが、余分なものを取り除いています。)
DataTemplate
バインドしているプロパティを変更するだけでこれを再利用するにはどうすればよいですか? ( a のように単純な場合TextBox
は気にしませんが、DataTemplate
実際にはStackPane
l に他の多くの要素が含まれていることに注意してください。それを 1 か所に集中させたいので、DataTemplate
.)
この問題に取り組むために、私は 2 つの方法を考えました。
- 簡単なカスタム コントロールを作成します。それを再利用し、再利用について心配する必要はありません
DataTemplate
。 - DataTemplate のある種のサブクラスを試してみてください。(これは可能だと言われています。) 依存関係プロパティを追加して、バインドするプロパティの名前を指定できるようにします。
提案?
.net - MVVM では、UserControls がビューであるため、DataTemplates はビューと見なされますか?
MVVM では、すべてのビューに ViewModel があります。ビューは、ビューがデータを取得するViewModelをアタッチできるウィンドウ、ページ、またはユーザーコントロールであると理解しています。
ただし、DataTemplateは ViewModel のデータをレンダリングすることもできます。
したがって、DataTemplate が別の「ビュー」であると理解していますが、違いがあるようです。たとえば、Windows、Pages、および UserControls は独自の .dll を定義できます。一方のタイプは、テンプレートをアタッチすることで DataContect にバインドされ、Windows、Pages 、 UserControls は、 ServiceLocator/Containerなどによって ViewModels に動的にアタッチできます。
UI で ViewModel のデータをレンダリングする場合、DataTemplates は Windows/Pages/UserControls とどのように異なりますか? また、これら 4 つ以外の「ビュー」の種類はありますか?
wpf - WPF でのデータベースのテンプレート選択
この単純な XAML の例があります。
MVVM スタイルの観察可能なコレクションでアイテムをレンダリングしています。各アイテムは、プロパティ内で水平位置を持っています。各アイテムには IsSpecial プロパティもあり、特別な方法でレンダリングする必要があるかどうかを示します。通常のアイテム (IsSpecial=false) を赤い四角 (既にコード内にある) としてレンダリングし、特別なアイテムを「特別な」テキストを含む青い円としてレンダリングします。
私が知らないのは、アイテムのテンプレート選択を行うために XAML コードを調整する方法です。自分の ItemTemplateSelector をコーディングせずにそれを行う方法はありますか? バインディングに基づいたキャンバスの配置でも機能しますか。解決策は、アイテム テンプレートを別のテンプレートに抽出し、特別なアイテム用のテンプレートをもう 1 つ作成してから、何らかの方法でトリガーを操作することだと思いますが、現時点では WPF 初心者であるため、簡単ではありません。
もう 1 つは、Position がアイテムに渡される方法が非常に気に入らないことです。他の方法はありますか?
コードを改善するための他の推奨事項はありますか?
wpf - ObservableCollection を DataTemplate の TextBoxes にバインドするにはどうすればよいですか?
ObservableCollection を DataTemplate の TextBoxes に正常に TwoWay バインドしようとしています。データを正しく表示することはできますが、UI からリスト データを変更することができません。「リスト」という名前の ObservableCollection を含む「モデル」という名前のモデル クラスがあります。クラスは、INotifyPropertyChanged インターフェイスを実装します。シェルの xaml は次のとおりです。Window1 のグリッドの DataContext は、「theGrid.DataContext=model」に設定されています。
これはモデル クラスのコードです。
私がこれを正しい方法で行っているかどうか、誰にもアドバイスできますか?
wpf - ViewModel の ObservableCollection を MenuItem にバインドするにはどうすればよいですか?
メニュー項目を ObservableCollection にバインドすると、MenuItem の「内部」領域のみがクリック可能になります。
代替テキスト http://tanguay.info/web/external/mvvmMenuItems.png
私のビューには、次のメニューがあります。
次に、このDataTemplateでバインドします。
ObservableCollection ManageMenuPageItemViewModelsの各 ViewModel にはプロパティTitleとIdCodeがあるため、上記のコードは一見すると問題なく動作します。
ただし、問題は、DataTemplate のMenuItemが実際には別の MenuItem内にある ( 2 回バインドされているかのように) ため、上記の DataTemplate with Background="Red" では、各メニュー項目内に赤いボックスがあり、この領域のみがあることです。メニュー項目領域自体ではなく、クリックできます (たとえば、ユーザーがチェックマークのある領域、または内側のクリック可能領域の右または左をクリックした場合、何も起こりません。色は非常に紛らわしいです。)
各MenuItem内の領域全体がクリック可能になるように、MenuItemsをViewModelsのObservableCollectionにバインドする正しい方法は何ですか?
アップデート:
そのため、以下のアドバイスに基づいて次の変更を加えたところ、次のようになりました。
代替テキスト http://tanguay.info/web/external/mvvmMenuItemsYellow.png
DataTemplate 内に TextBlock しかありませんが、「MenuItem 全体に色を付ける」ことはできませんが、TextBlock だけです。
CommandバインディングをMenu.ItemContainerStyleに入れましたが、今は起動しません:
silverlight - DataTemplate内からバインドしますか?
私はSilverlightコントロールを構築しており、それぞれのDataTemplatesを介してHeaderとBodyContentControlsのバインディングを設定しようとしています。理由はわかりませんが、これは機能しません(サイレントに失敗します)。私の唯一の推測は、DataTemplatesがStaticResourcesであるためだと思います。誰かアドバイスはありますか?コントロールには、次のデフォルトテンプレートがあります。
ありがとう!
アップデート
実際には、次のコードも機能しないため、StaticResourcesに関する私の仮定は間違っている可能性があります。
silverlight - ViewModelへのSilverlightDataGrid.Celltemplateバインディング
MVVCパターンを実装している最中であり、データグリッド内のDataTemplate内からビューモデルのプロパティをバインドするのに問題があります。列のDataTemplateの外側にテキストブロックがある場合(UserConrolのデータコンテキスト、つまりVMを直接参照しているため)、正常に機能しますが、DataTemplate内からはプレーンテキストプロパティが返されません。ただし、繰り返されるIEnumerableアイテムからプロパティを返します。
無視しているDataTemplateに何らかの問題がありますか?「{BindingPath=DataContext.testText、ElementName = View}」は、DataTemplate内の要素を除くすべての要素で機能することに注意してください。(DGの外側の最初のTextblockはElementNameなどを必要としないことを知っていますが、それが正しいことを参照していることを自分自身に証明するために、この方法で実行しました)
c# - WPF ListView がテンプレートをレンダリングしない
ListView
からのアイテムを入力している がありますObservableCollection
。一部のアイテムをフィルタリングするために 2 番目のリスト ビューを追加することにするまで、すべてがうまく機能していました。
私が今セットアップしたのは、メインのリストビューにItemGroup
レンダリングされたアイテムとしてオブジェクトがあり、表示されているアイテムがアイテム グループの最初にあるということです。バケットを含むハッシュテーブルを想像してください。リストに表示されるアイテムは、グループ内の最新のアイテムです。
クリックすると、その「バケット」のすべてのアイテムを含む別のリストビューが表示されるボタンがあります。ただし、新しいリストビューに表示されるのは、アイテムの空白のエントリだけです。アイテム スタイルの背景が表示されますが、セル テンプレートが空のように見えます。
私の唯一の推測は、一部の項目が既に別の にあるため、参照の問題があるということですItemSource
。
スクリーンショットを添付しました:
これが私のものDataTemplate
です:
データバインディングをセットアップする方法は次のとおりです (MatchApiObject は、上記のバインディングに使用されるオブジェクトですDataTemplate
)。
そして groupViewListView 自体:
編集: デバッグすると、リストビューにはバインディングに適切な項目があります (たとえば、CurrentItem はバインディングに使用する必要がある適切なオブジェクトを示します) が、何らかの理由でそれらが表示されません。
c# - ResourceDictionary で定義された DataTemplate の分離コード
ResourceDictionary で DataTemplate を定義しました。テンプレートには、いくつかのデータが必要です (ListBox に入力するため)。以前は、テンプレートは UserControl であり、データは DataContext プロパティを設定することによって提供されていました。
DataTemplate のコード ビハインドを使用する方法はありますか、または ObjectDataProvider を使用してデータを唯一のオプションとして提供していますか?