問題タブ [propertychanged]

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 投票する
4 に答える
12354 参照

c# - WPF:PropertyChangedCallbackは1回だけトリガーされます

VisibileItemsというDependencyPropertyを公開するユーザーコントロールがあります。そのプロパティが更新されるたびに、別のイベントをトリガーする必要があります。これを実現するために、PropertyChangedCallbackイベントを使用してFrameworkPropertyMetadataを追加しました。

何らかの理由で、このイベントは1回だけ呼び出され、次にVisibleItemsが変更されたときにトリガーされません。

XAML:

CurrentTablesは、MyViewModelのDependencyPropertyです。CurrentTablesは頻繁に変更されます。別のWPFコントロールをCurrentTablesにバインドすると、UIに変更が表示されます。

これが、VisibleItemsをPropertyChangedCallbackで配線した方法です。

VisiblePropertyChangedにステップインすると、CurrentTablesが最初に設定されたときにトリガーされることがわかります。しかし、その後の時間ではありません。

アップデート

CurrentTablesの変更方法について質問された方もいらっしゃると思いますが、変更時に完全に再割り当てされます。

この行は変更のたびに呼び出されますが、VisiblePropertyChangedハンドラーは最初にのみ呼び出されます。

アップデート

VisibleItemsを直接割り当てると、ハンドラーは毎回呼び出されます。

したがって、問題はDependencyProperty(VisibleItems)が別のDependencyProperty(CurrentTables)を監視していることに起因しているように見えます。どういうわけか、バインディングは最初のプロパティの変更では機能しますが、その後の変更では機能しませんか?あなたの何人かが示唆したように、スヌープでこの問題を調べようとしています。

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

wpf - WPFCatchObservableCollectionのアイテムプロパティの変更

こんにちは私はこれを行うためのいくつかの方法を試していましたが、成功しなかったか、理想的ではありませんでした。コレクション内のアイテムのPropertyChangedイベントをキャッチしたいだけです。私は今それを手動で配線しましたが、もっとエレガントな解決策があるかどうか疑問に思っています:

次に、コレクションのMyPropertyChangedイベントに簡単にアタッチできます。これはうまく機能しますが、よりエレガントな人はいますか?

前もって感謝します

0 投票する
2 に答える
20555 参照

wpf - WPFで、Bindingが機能するのにTemplateBindingが機能しないのはなぜですか?

わかりました...これで頭をかいてしまいます。2つのWPFコントロールがあります。1つはユーザーコントロールで、もう1つはカスタムコントロールです。それらをUserFooとCustomFooと呼びましょう。CustomFooのコントロールテンプレートでは、名前付きパーツであるUserFooのインスタンスを使用して、テンプレートの適用後にアクセスできるようにします。それはうまくいきます。

これで、UserFooとCustomFooの両方に、Textこのように宣言されたプロパティが定義されます(独立して、つまり、AddOwnerを使用する共有DPではありません。質問しないでください...)。

特に、モードがTwoWayに設定され、UpdateSourceTriggerがPropertyChangedに設定されていることに注意してください。

そのため、CustomFooのスタイルテンプレートで、CustomFooのTextプロパティをソースとして内部のUserFooのTextプロパティにバインドしたいと思います。通常、これは簡単です。UserFooのtextプロパティを"{TemplateBindingText}"に設定しただけですが、何らかの理由で一方向にしか進まない(つまり、UserFooはCustomFooから適切に設定されていますが、逆ではありません)。ただし、両方のDPが双方向に設定されています。ただし、テンプレートバインディングの代わりに相対ソースバインディングを使用する場合は、うまく機能します。えっと…なに?

では、何が得られるのでしょうか?私は何が欠けていますか?

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

silverlight - Silverlight:プロパティを設定するとデータバインディングが直接削除されますか?

プロパティなどの設定にコード ビハインドを多用する Silverlight プロジェクトを変更しています。これは数年前に作成され、多かれ少なかれ WinForms プロジェクトから移植されました。

私が気付いた問題は、プロパティ (この場合は Visibility) のデータ バインディングを設定するときに、そのプロパティがコード ビハインドで直接設定されている場合、データ バインディングが削除されることです。PropertyChanged イベントにブレーク ポイントを設定して、これが事実であることを確認しました。

私はかなりの WPF 開発を行ってきましたが、これに気づいたことはありません。これは正常で、私はそれを見逃しましたか、それとも何かが正しくありませんか?

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

silverlight - UpdateSourceTrigger PropertyChanged in Silverlight?

入力した内容に応じてViewCollectionをフィルタリングするために、好きなテキストボックスにすぐに入力すると、ほとんどの人がこれに遭遇したと思います。

WPFでは非常に簡単で、テキストバインディングのUpdateSourceTriggerをPropertyChangedに変更するだけです。

ご想像のとおり、Silverlightにはありません。代わりに、デフォルトと明示的なものがあります。

代わりに、インタラクション動作をテキストボックスのTextChangedイベントにバインドするというアイデアがありました。このアプローチをお勧めしますか、それとももっと良い方法がありますか?

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

wpf - テンプレート列のテキストボックスがプロパティを起動しないWPFDataGridが変更されました

テンプレート列のあるデータグリッドがあり、そのテンプレートにはテキストボックスがあります。これは、itemssourceを構成するコレクション内のオブジェクトの「Quantity」プロパティにバインドされています。数量は整数です。データグリッドにアイテムを追加すると、アイテムのPropertyChangedイベントにイベントハンドラーが追加されます。

これは、ユーザーがテキストボックスに整数を入力すると正常に機能します... p_PropertyChangedハンドラーが起動し、ボタンを無効にして、必要に応じて数量を変更できます。ユーザーが非整数を入力しても、ハンドラーは呼び出されず、テキストボックスの周りに赤いアウトラインが表示されます。このため、必要なときに必要なボタンを無効にすることはできません(数量が合法でない場合は無効にする必要があります)。これについて何かできる方法はありますか?

編集: Quantityプロパティを文字列に変更しようとしましたが、これにより、非整数値が入力されたときにプロパティ変更ハンドラーが呼び出されました。ただし、テキストボックスに検証を追加してこれを確認し、Validateメソッドがfalseを返した場合、プロパティ変更ハンドラーは再びヒットしなくなります。検証とプロパティ変更の両方の通知を受け取る方法はありますか?

編集2:ここで私が抱えているこの問題の別の例を別の場所で。電話番号を追加/編集するためのフォームがあります。電話番号のテキストボックスは次のようになります。

保存ボタンをクリックしたら、ビューモデルで番号が有効かどうかを確認する必要があります。有効でない場合は、保存コマンドを実行したくないためです。ただし、検証が失敗した場合、Phone.Numberプロパティの値がnullになり、saveコマンドを実行する必要があるかどうかを確認する方法がないため、これを行う方法はないようです。エラー状態(Validation.GetErrorsで機能すると思いましたが、機能しない)にアクセスするか、ビューモデルでは使用できないテキストボックス内の実際のテキストにアクセスする必要があります。

0 投票する
5 に答える
3955 参照

c# - TextBoxエントリで一時停止中にPropertyChangedイベントを発生させますか?

PropertyChangedユーザーがテキストを入力中に一時停止したときにイベントを発生させることができるかどうか疑問に思っていましたTextBox? Xより具体的には、ユーザーが TextBox への入力を停止してから数秒後にメソッドを実行したいと考えています。

たとえば、TextBox のみを含むフォームがあります。ユーザーが 1 ~ 9 桁の Id 値を TextBox に入力すると、かなりリソースを消費するバックグラウンド プロセスによってレコードが読み込まれます。

文字が入力されるたびにリソースを集中的に使用するバックグラウンド プロセスが実行されるため、使用したくありませんUpdateSouceTrigger=PropertyChanged。9 桁の ID 番号はこれらのプロセスの 9 つから始まります。

UpdateSourceTrigger=LostFocusTextBox がフォーカスを失うようにするフォームには他に何もないため、私も使用したくありません。

ID番号を入力するときにユーザーが一時停止した後にのみバックグラウンドプロセスを実行させる方法はありますか?

0 投票する
4 に答える
2785 参照

java - SpinnerNumberModelのPropertyChangeSupport

JSpinnerのSpinnerNumberModelの値の変化を聞きたいです。
PropertyChangeSupportを作成し、それにモデルを配置します。

プロパティの新旧の値が表示されるため、propertyChangeListenerが必要です。

スニペットが機能しませんpropertyChange。JSpinnerをクリックしても、メソッドは何も出力しません。
単純なChangeListenerは新しい値のみを提供しますが、古い値も必要です。どうすれば取得できますか?

0 投票する
3 に答える
1521 参照

wpf - WPFでのPropertyChangedUpdataSourceTriggerの奇妙な動作

私はこのようなエンティティを持っています:

次に、XAMLに3つのテキストボックスとボタンがあります。

奇妙なことに、エンティティ「Person」はINotifyPropertyChangedを実装していませんが、1つのテキストボックスが変更されると、ソース(Personオブジェクト)が変更されますが、プロパティ変更イベントは発生せず、残りの2つのテキストボックスが発生します。自動的に変更されました。

ボタンがクリックされると、次のようなコードでソースを直接更新します。

更新されません。つまり、PersonクラスがINotifyPropertyChangedを実装している場合、この動作は正常ですが、クラスはインターフェイスを実装していませんが、インターフェイスも更新していると思います。手がかりがあれば理由を教えてください。ありがとう。

0 投票する
2 に答える
703 参照

silverlight - ディクショナリValueCollectionへのバインド

ValueCollectionがクラスで構成されているディクショナリがあります。これはVMのプロパティとして公開され、UIのDataGridにバインドされています。私の問題は、ディクショナリが非同期で入力され(実際にはObservableDictionaryであるため、変更イベントを監視できます)、グリッドに結果が表示されないことです。アイテムがディクショナリに追加されるたびにDataGridがバインドされるプロパティのVMでPropertyChangedイベントを発生させていますが、結果を取得できません。イベントが発生することを確認しました。

ObservableDictionaryの代わりにストレートのObservableCollectionを使用する場合、すべてが正常であり、PropertyChangedを上げる必要もありませんが、Dictionaryを使用してコレクションを保持し、各エントリで一意のキーを保持したいと考えていました。

私は何か間違ったことをしていますか、それとも私が使用できる別のコレクションの回避策がありますか?また、バインディングの値コレクションで.ToObservable()または.ToEnumerable()を呼び出してみました。