問題タブ [updatesourcetrigger]
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 の UpdateSourceTrigger=PropertyChanged および StringFormat に関する問題
アプリケーションに、クラスの 10 進数フィールドにデータ バインドされたテキスト ボックスがあり、バインド モードは双方向です。通貨の書式設定に StringFormat={0:c} を使用しています。
「UpdateSourceTrigger」に触れない限り、これは正常に機能します。UpdateSourceTrigger=PropertyChanged を設定すると、入力しているテキストの書式設定が停止します。
これが私のコード例です
Employee.cs
EmployeeList.cs:
Window1.xaml:
上記のコードから「UpdateSourceTrigger=PropertyChanged」を削除すると、正常に動作します。
StringFormat の代わりに Converter を使用してみましたが、それでも問題は解決しません。
c# - wpfでバインディングのデフォルトの動作をグローバルに変更する方法はありますか?
バインディングのデフォルトの動作を変更する方法はありますか?
これは、ControlTemplate または Style を介して行うことができますか?
textbox - UpdateSourceTrigger=PropertyChanged の TextBox のテキストは、テキスト入力の強制によってソース値が変更されない場合に更新されません。
TextプロパティにTwoWay MultiBindingがあり、 UpdateSourceTrigger がPropertyChangedに設定されているテキスト ボックスがあります。最初のBindingは、値を小数点以下 1 桁に丸めるPropertyChangedCallBack関数を持つ依存関係プロパティ ( Value )に対するものです。
テキスト ボックスの目的は、テキスト ボックスがフォーカスを失ったときではなく、ユーザーが入力したときに丸めを実行することです。そのため、 UpdateSourceTriggerがPropertyChangedに設定されています。
私が抱えている問題は、値が変更されないテキストが入力された場合、 Textプロパティと値が同期しなくなることです。丸め操作によってValueが変更された場合にのみ、 Textがその場で更新されます。たとえば、TextとValueが両方とも 123.4 で、ユーザーがこの後に 1 を入力した場合、Valueは同じ値 (123.4) に丸められますが、Textは 123.41 を示します。ただし、4 の後に 9 を入力すると、Valueは 123.5 に切り上げられます。この実際の変更により、Textは同じ (123.5) に更新されます。
ソースが最後のトリガーから変更されていない場合でも、テキスト ボックスをソースから強制的に更新する方法はありますか? 使用してみましたが、これはUpdateSourceTriggerがExplicitに設定されてBindingExpressionBase.UpdateTarget()
いる場合にのみ機能します。これは、 UpdateTargetを呼び出すことができる適切な時間 ( TextInputハンドラーなど)の前に値が更新されないため、使用できません。バインドされたValueからText値を明示的に更新する、一時的にValueを実際に変更して更新を呼び出すなどの他の方法を試しましたが、これらの「ハック」は機能しないか、他の問題を引き起こします。
どんな助けでも大歓迎です。
コードは以下です。
XAML スニペット
C# スニペット
コンバータークラスが必要
wpf - WPF DatePicker UpdateSourceTrigger PropertyChanged が機能しない
私はMVVMを使用しており、日付ピッカーコントロールのテキスト変更のボタンを有効にしたい..
XAML コード: DatePicker でのバインド
ボタンのバインディング:
ビュー モデル コード: ボタンのクリックに DelegateCommand を使用しています
モデル デリゲートの初期化の表示
AllowSubmit の実装
InactiveDate プロパティの実装
SubmitCommand.RaiseCanExecuteChanged()
DateTimePicker に文字を入力したらボタンを有効にする必要がありますが、それは起こっていません。
wpf - 編集可能なWpfコンボボックスでソース更新トリガーを使用するにはどうすればよいですか?
私はコンボボックスを持っています(私のwpf-mvvmアプリに)。設定しIsEditable = true
ました。しかし、入力を開始すると「プロパティ変更イベント」が発生します。
ここで設定するにはどうすればよいUpdateSourceTrigger = Propertychanged
ですか?
また、ユーザーが新しい値を入力した場合は、検証関数を呼び出す必要があります(つまり、編集機能を使用してリストで使用可能な値以外を意味します)。
どんな助けでもありがたいです。
silverlight - Silverlight の Datacontext の UpdateSourceTrigger
こんにちは、MVVM Silverlight アプリに取り組んでおり、TextBox の UpdateSourceTrigger プロパティを使用して、実行時にバインディング式を次のように更新します。
.xaml.cs:
BindingExpression beID = txtEmpID.GetBindingExpression(TextBox.TextProperty); beID.UpdateSource();
BindingExpression beAge = txtAge.GetBindingExpression(TextBox.TextProperty); beAge.UpdateSource();
.xaml:
この場合、テキスト ボックスごとに手動でバインディング式を実行しています。単一のインスタンスで、グリッド内のすべてのテキスト ボックス コントロールに対してこのバインディング式を実行できる方法はありますか。
wpf - データのロード時に計算されたバインドされたテキストボックスでUpdateSourceを防ぐにはどうすればよいですか?
ユーザーが3つのテキストボックスに数値を入力すると、4番目のテキストボックスで平均が計算されます。CalculateAverageメソッドは、最初の3つのテキストボックスのTextChangedイベントから呼び出されます。すべてのテキストボックスがバインドされます。(注:計算値をデータベースに保存するべきではないことはわかっていますが、これを変更することはできません。)WPF4とEntityFramework4を使用しています。
私の問題は、平均的なテキストボックスに常にEntityState.Modifiedがあることです。これは、データのロードまたはレコードのナビゲートにより、TextChangedイベントがCalculateAverageを呼び出すためです。ユーザーが変更を加えておらず、CurrentValue(平均)がOriginalValueと一致している場合でも、バインディングメカニズムはこのレコードを「ダーティ」と見なします。
私が実装したものよりもクリーンなソリューションがあるかどうか疑問に思います。私の修正は、データのロード中およびレコードのナビゲーション中にフラグを設定することです。これは、_changingRecordsフラグを設定するためにOnRecordChangingイベントを追加し、設定を解除するためにOnRecordChangedイベントを追加する必要があることを意味します。CalculateAverageの開始時に、if (_loadingData || _changingRecords) return;
CalculateAverageを回避し、平均フィールドが更新されないようにする必要があります。
この問題を回避するためのよりクリーンなアプローチはありますか?
c# - Silverlight DataGrid の DataTemplate と明示的な UpdateSourceTrigger
ユーザーが [OK] ボタンをクリックすると、DataGrid の DataTemplate の Textbox が明示的に更新されるようにします。次の XAML コードがあります。
UpdateSourceTrigger を Explicit に設定しました。TextBox 項目にアクセスして UpdateSource() を呼び出すにはどうすればよいですか?
silverlight - UpdateSourceTrigger PropertyChanged in Silverlight?
入力した内容に応じてViewCollectionをフィルタリングするために、好きなテキストボックスにすぐに入力すると、ほとんどの人がこれに遭遇したと思います。
WPFでは非常に簡単で、テキストバインディングのUpdateSourceTriggerをPropertyChangedに変更するだけです。
ご想像のとおり、Silverlightにはありません。代わりに、デフォルトと明示的なものがあります。
代わりに、インタラクション動作をテキストボックスのTextChangedイベントにバインドするというアイデアがありました。このアプローチをお勧めしますか、それとももっと良い方法がありますか?
wpf - TextBox UpdateSourceTrigger = PropertyChanged - 本当にパフォーマンスに影響しますか?
MSDN のドキュメントには次のように記載されています。
TwoWay または OneWayToSource であるバインディングは、ターゲット プロパティの変更をリッスンし、それらをソースに伝達します。これは、ソースの更新として知られています。通常、これらの更新は、ターゲット プロパティが変更されるたびに発生します。これは、チェック ボックスやその他の単純なコントロールでは問題ありませんが、通常、テキスト フィールドには適していません。キーストロークのたびに更新すると、パフォーマンスが低下する可能性があり、ユーザーが新しい値にコミットする前にバックスペースして入力エラーを修正する通常の機会が失われます。したがって、Text プロパティの既定の UpdateSourceTrigger 値は LostFocus であり、PropertyChanged ではありません。
更新がデータベースまたはネットワーク経由で直接行われる状況、またはデータが非常に大量の場合、TextBox で UpdateSourceTrigger = PropertyChanged を使用すると実際にパフォーマンスが低下する可能性があることを理解しています。
しかし、単純な DependencyProperty、または Entity Framework オブジェクトのプロパティを (コミットする前に) 更新するだけの場合、パフォーマンスへの影響は無視できないでしょうか?
編集中のオブジェクトの状態を追跡し、変更が行われたかどうかに応じて [保存] ボタンの外観を最適化する WPF アプリを作成しているため、不思議に思っています。変更を判断する最も簡単な方法は、関連する SourceUpdated の発生を適切にキャッチすることだと思いました。テキストボックスの UpdateSourceTrigger = PropertyChanged の場合に最適に機能します。これは、ユーザーが「保存可能な」変更があるという即座のフィードバックを受け取るためです。