問題タブ [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 - TextBlock のハイパーリンク用の DataTemplate/Value Converter
人の名前、電子メール、部門などのリストを表示する ListBox があります。各プロパティを表示するためのいくつかの TextBlocks を持つ DataTemplate があります。これらの TextBlocks の 1 つは、ハイパーリンクをラップして、電子メール アドレスを次のように表示します。
これは問題なく機能しますが、その人が電子メール アドレスを持っていない場合、TextBlock は自動的に折りたたまれません。そこで、値コンバーターを作成し、次のようなスタイルで使用しました (簡略化):
これは、ValueConverter を使用したスタイルです。
そして、コンバーターを呼び出すスタイルを TextBlock に追加しました。
この変更後、電子メール アドレスは表示されません。値コンバーターでは、TextBlock のテキストは常に空で、Visibility.Collapsed が返されます。ハイパーリンクが読み込まれる前に TextBlock のテキストを評価しているようなものです...
これを理解するのを手伝ってください。
ありがとう!
silverlight - BlendのCLRオブジェクトに対するSilverlightデータバインディング
CLRオブジェクトへのデータバインディングをセットアップし、Silverlightコントロール/ページを設計できるBlendの機能が大好きです。私の問題は、DataTemplateとして使用されるユーザーコントロールの作成に関するものです。それはすべてBlendでうまく機能しますが、設計時のみです。問題は、Blendでコントロールを編集していて、テキストボックスをCLRオブジェクトのプロパティにバインドすると、次のようになることです。
しかし、アプリを実行する準備ができて、DataTemplate内でそのユーザーコントロールを使用してリストボックスなどを作成する場合は、次のようにする必要があります。
Belndでデザインするために気の利いたバインディングを使用するにはどうすればよいですか?プロジェクトを実行する準備ができたら、これらのバインディングすべてに触れたり、検索したり、置き換えたりする必要はありませんか?設計時と実行時の両方で機能するアプローチを探しています。
ありがとう、
wpf - WPFメモリ使用量
応用:
- 上部のテキストボックスと下部のリストボックスで構成されるWPFアプリケーション
- ユーザーがテキストボックスに文字列を入力して従業員を検索すると、検索結果がリストボックスに表示されます
- ListBoxは、DataTemplatesを使用して要素を表示します(従業員名、部門、電話番号、サムネイル画像を表示します)。
実装:
- アプリケーションの起動時に、データベースにクエリを実行し、リストボックスに表示されるすべての従業員と関連情報を取得します。これは常にメモリに保持されます。
- アプリケーションの起動後、検索可能なデータはすべてメモリ内にあり、検索は事実上瞬時に行われます。すべての検索は、すでにメモリにあるデータに対して実行されます。
- 検索結果は、DataTemplatesを使用してリストボックスに表示されます。サムネイル画像、名前、電話番号、部門などが各リストボックス項目に表示されます。
問題:
- 起動時のメモリ使用量は約200MBです。
- 新しい検索またはリストボックスを下にスクロールするだけでリストボックス内のデータが変更されると、メモリ消費量が増加します。
- ユーザーがリストボックスをゆっくりと下にスクロールすると、メモリがより速く増加します。上下にスクロールすると、メモリはすぐに1GBに達します。
コントロールを手動で作成するコードはありません。すべてがデータバインディングを介して行われます。
なぜこの動作が見られるのですか?それを修正するにはどうすればよいですか?助けてください!
更新:問題はメモリリークではないことがわかりました。ここでの問題は、リストボックスが従業員の画像を表示するオブジェクトを作成しており、リストボックスアイテムがウィンドウから出た後、ガベージコレクター用にリリースされていないことです。CleanUpVirtualizedItemイベントは予想どおりに発生しますが、メモリはまだ解放されていません。何か案は?
wpf - MEFを使用してWPFDataTemplateをインポートしますか?
私はMEFを拡張性フレームワークと見なしていましたが、1つの点を除いて、ほとんど売れています。
ViewModelとViewの両方をインポートして表示したいとします。そのための「正しい」方法は、MEFパーツがViewModelクラスと、ViewModelを表示するDataTemplateをエクスポートすることだと思います。例として、Visioのようなアプリケーションを作成していて、図形のライブラリをインポートするとします。各図形には、Xamlで定義されたビューと、基になるModelオブジェクトをラップするViewModelが必要です。
これは可能ですか?DataTemplateのインポートコントラクトはどのようになりますか?インポートされたDataTemplateをWPFに認識させるにはどうすればよいですか?
wpf - ListBoxItem の子要素を列挙する
実際のビジュアルは、DataTemplate によって決定されます。実行時に、ListBoxItem のすべてのビジュアル要素を反復処理するにはどうすればよいですか?
wpf - WPF - DataTemplate の MenuItem のコマンド
Image を含む DataTemplate があります。Image に、MenuItem を含む ContextMenu を追加しました。MenuItem にコマンドを関連付けました。次に、DataTemplate を使用してビューでコマンドを処理します。
CanExecute ハンドラーには、e.CanExecute = true があります。ただし、Executed ハンドラーは実行されません。Command の割り当てである MenuItem を削除すると、イメージを右クリックしたときにメニューが正しく表示されます。
私は何を間違っていますか?
ありがとう!
wpf - WPF:マウスイベントをビューモデルに添付する方法は?
MVVM パターンを初めて使用しようとしています。だから私はItemsControl
ビューモデルオブジェクトでいっぱいになり、DataTemplate
's;を使って表示されました。オブジェクトはとオブジェクトで表されるDataTemplate
「ノード」と「エッジ」であり、ノードとエッジを移動するためにクリックとドラッグを検出できるようにしたいと考えています。Thumb
Polyline
ItemsControl
2 つの質問:
Polyline
マウス イベント ハンドラをとにアタッチThumb
して、小さなビューモデルで処理するにはどうすればよいですか?Thumb.DragDelta
(ハンドラーをItemsControl
およびにアタッチすることはできe.OriginalSource
ますThumb
が、対応するビューモデル オブジェクトを取得するにはどうすればよいでしょうか?)ItemsControl
にマウス イベント ハンドラーをアタッチして、空白スペースでのマウスのクリックとドラッグを検出するにはどうすればよいですか? (答えは下にあります)
注: View のイベントを直接処理している場合、適切な ViewModel と見なされない可能性があることはわかっています。しかし、重要な点は、マウス イベントを処理する必要があり、それらをアタッチする方法がわからないということです。
wpf - デザイナーが DataTemplate.DataType を拒否する
現在の Windows フォーム アプリケーションに WPF を適合させようとしています。この単純なユーザー コントロールを使用すると、そのコントロールのデザイナーが再読み込みされません。
これは、このアプリケーションでのみ発生します。クリーンな Windows フォーム プロジェクトを作成し、これらのファイルを追加すると、デザイナーは正常に動作します。
Visual Studio のリロードと、アプリケーションのクリーニング/再構築を試みました。
何か案は?(これらは ListBox 内のアイテム用であるため、x:Key はオプションではありません。)
PS コード リストの末尾の空白行をすべて削除するにはどうすればよいですか?
詳細:
MyClasses.cs
MyUserControl.xaml
MyUserControl.xaml.cs
wpf - DataTemplateでMenuItemのコマンドを指定します
コンテキストメニューがあります。これはいくつかのコレクションにバインドされており、次のように定義されたItemTemplateがあります。
itemTemplateは、TextBlockを備えた単純なDataTemplateです。
MenuItemのCommandプロパティを基になるオブジェクトのプロパティにバインドするにはどうすればよいですか?