問題タブ [inotifypropertychanged]

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

c# - UI スレッドへの呼び出しをディスパッチする INotifyPropertyChanged プロキシの作成

別の (非 GUI) スレッドによって変更されたオブジェクトに WinForms コントロールをバインドするための動的プロキシを作成したいと考えています。このようなプロキシは、PropertyChanged イベントをインターセプトし、適切な SynchronizationContext を使用してディスパッチします。

そうすれば、ヘルパー クラスを使用してジョブを実行でき、毎回手動で同期を実装する必要がありません ( if (control.InvokeRequired) etc.)。

LinFu、Castle、または同様のライブラリを使用してそれを行う方法はありますか?

[編集]

データ ソースは必ずしもリストではありません。任意のビジネス オブジェクトを指定できます。たとえば、次のようになります。

ジョブを実行できるラッパーを作成できます。次のようになります。

(このコードにはいくつかのエラーがあるかもしれません、私はそれを作成しています)

私がやりたいことは、動的プロキシ(Reflection.Emit)を1つのライナーにすることです。

そして、既存の動的プロキシ実装を使用してこのようなことが可能かどうかを知りたかった.

より一般的な質問は次のとおりです。動的プロキシを作成するときにイベントをインターセプトする方法は? プロパティのインターセプト (オーバーライド) については、すべての実装で十分に説明されています。

[編集2]

プロキシが必要な理由 (と思います) は、スタック トレースが次のようになっているためです。

がインスタンスを にBindToObject.PropValueChanged渡していないことがわかります。Reflector は、sender オブジェクトがどこにも参照されていないことを示しています。つまり、イベントがトリガーされると、コンポーネントはリフレクションを使用して元の (バインドされた) データ ソースのプロパティにアクセスします。senderPropertyManagerPropertyChanged

イベントのみを含むクラスでオブジェクトをラップした場合 ( Samが提案したように)、そのようなラッパー クラスには、Reflection を介してアクセスできるプロパティは含まれません。

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

c# - TextBlock はコード ビハインド プロパティの値を表示できるのに、border/padding はそれを使用できないのはなぜですか?

次の Silverlight アプリケーションでは、TextBlock が OuterPadding の値を正しく表示しているにもかかわらず、プロパティ OuterPadding が外側の境界線のパディングを変更しないのはなぜですか? Border パディングを単純な整数に変更すると、パディングは正常に機能しますが、コード ビハインドのプロパティで定義されている場合は機能しません。

この同じコードは、WPF で正常に動作します。

XAML:

コードビハインド:

0 投票する
6 に答える
7720 参照

wpf - 観察可能INotifyPropertyChanged - 接続はありますか

IObservable<T>&IObserver<T>はオブザーバー パターンの実装であり、.Net イベントと同様の状況で使用できることを理解しています。

と何か関係があるのか​​なINotifyPropertyChanged

現在INotifyPropertyChanged、winforms と WPF アプリケーションでデータ バインディングに使用していますが、UI データ バインディング シナリオで IObservable を使用できるかどうか疑問に思っていましたか?

乾杯

AWC

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

c# - WPF:INotifyPropertyChangedインターフェイスを実装せずにプロパティの変更を表示する

私のWPFアプリケーションには、ユーザーに表示したいブール値のプロパティがあります(たとえば、読み取り専用のチェックボックスを使用)。通常、INotifyPropertyChangedを実装して、WPFがそれに基づいて動作し、それに応じてチェックボックスを変更できるようにします。

私が今抱えている問題は、このプロパティ値が閉じたフレームワークから取得されることです。つまり、値をポーリングすることしかできませんが、サブスクライブできる変更イベントはありません。

私が最初に考えたのは、別のスレッドを作成することでした。このスレッドは、定期的に(たとえば、10ミリ秒ごとに)値をポーリングし、値が変更されたときにイベントを作成します。しかし、それは私にはやり過ぎのようです。

だから私の質問は:INotifyPropertyChangedがオプションではない場合に変化する値を表示するためのWPFの機能はありますか?ある種のポーリングメカニズム、多分?そうでない場合、この問題にどのように取り組みますか?

御時間ありがとうございます。

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

c# - WCFサービスのDataContractプロキシクラスのPropertyChangedをサブスクライブする

部分的なクラスを使用して、WCFサービスのデータコントラクトであるクライアント側のクラスを拡張するというアイデアが好きです。しかし、私はパーティーをかなり台無しにする問題に遭遇しました。

サーバー側でクラスがあると想像してください。

クライアント側では、プロキシクラスが生成され、ビジネスロジック層で使用されます。ビジネスロジックのニーズに応じて、次のように拡張します。

ここで、PositionまたはSizeのいずれかが変更されたときに、Boundschageイベントが呼び出されるようにします。コードで簡単に実行できます。

問題は、このコードを配置するのに適した場所がどこにあるかです。

オブジェクトがサービス呼び出しによって作成されていない場合は、コンストラクターに入れます。しかし、WCFサービスはクライアント側のコンストラクターを無視します。コンストラクターがWCFクライアントに表示されない、シリアル化の問題を参照してください。

これで、サービス応答の直後に、プログラムはデータコントラクト階層を検索し、目的のオブジェクトを取得して、イベントハンドラーを追加します。しかし、それは正しいことではないと思います。

ですから、どこでやったほうがいいのか、あるいはアプローチ全体を変えるべきだと考えているのか、興味があります。どんなアイデアでもありがたいです。

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

inotifypropertychanged - 意図した ObservableCollection +NotifyPropertyChanged

こんにちは、タイプ CMessage のオブジェクトのリストがあります。CMessage は次のようになります。

各プロパティには、 INotifyPropertyChanged インターフェイスの実装である RaiseNotifyPropertyChanged メソッドがあります。ポイントは:

  1. ObservableCollection メッセージのリストからいくつかのメッセージを選択します。
  2. 選択したメッセージにいくつかの回答を追加します

そのメッセージに対して実行された RaisePropertyChanged がないのはなぜですか? そうすべき!

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

c# - INotifyPropertyChanged および計算されたプロパティ

WPF UI にバインドできる TotalPrice 計算プロパティを持つ単純なクラス Order があるとします。

TotalPrice の計算に影響するプロパティで RaisePropertyChanged("TotalPrice") を呼び出すのは良い方法ですか? TotalPrice プロパティを更新する最良の方法は何ですか? もちろん、これを行う他のバージョンは、このようにプロパティを変更することです

this.RaisePropertyChanged("TotalPrice"); の代わりに TotalPrice = -1 を呼び出します。他のプロパティで。より良い解決策を提案してください

どうもありがとう

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

c# - 誰が/何が Set Property を呼び出したかを特定する

と呼ばれるコントロールを特定しようとしていSet propertyます。textbox Petがプロパティにバインドされているとします。私は使用してINotifyPropertyChangedいますが、実際の制御を取得する方法があるかどうか疑問に思っています。

senderin myはプロパティを含むクラスPropertyChanged Eventであり、イベントの発生につながる一連のイベントを最初に開始したコントロールではありません。

これは可能ですか?もっと簡単な方法はありますか?

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

data-binding - デリゲートコマンドが完了するまでバインディングの更新が遅れるのはなぜですか?(MVVM)

MVVMパターンを適用しています。クリックすると、ViewModelでデリゲートコマンドを呼び出すボタンがあります。そのデリゲートメソッドの最初に、アニメーション化されたコントロールを表示して待機するようにUIにユーザーに通知するプロパティ値(WaitOn)を設定しました。

ただし、そのアニメーション化されたコントロールを表示するためのバインディングは、デリゲートが実行を完了するまで更新されません。実行が完了すると、待機が完了します。なぜこれが発生し、それを回避するにはどうすればよいですか?

サンプルXAML:

ViewModelからのスニペット:

そして今、発生したイベントをキャッチするためにXAMLからコードビハインドします。

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

wpf - 複数のViewModelで1つのビューを処理し、異なるコマンドを実行する方法は?

1つのビューとビューが複数のViewModelとバインドされているシナリオがあります。

例えば。以下のように電話の詳細とViewModelを表示する1つのビュー:

  • 電話の基本機能-PhoneViewModel、
  • 電話料金の詳細-PhoneSubscriptionViewModel、
  • 電話アクセサリ-PhoneAccessoryViewModel
  • 一般的なプロパティの場合-PhoneDetailViewModel

Viewの一般的なプロパティをPhoneViewModelに配置しました。これで、シナリオは次のようになります。

デフォルトでは、ViewはPhoneViewModelのObservationCollectionにバインドされているPhoneBasic機能を表示します。私のビューにはボタンがあります- 'アクセサリの表示'、このボタンをクリックするとポップアップ画面が1つ表示されます-私のデザインでは、グリッドを表示/非表示にして、PhoneAccessoryViewModelのObservationCollectionとバインドします。

ここで問題が始まります-アクセサリリストにも[詳細の表示]ボタンがありますonclick1つのポップアップ画面を開く必要があります。ここでも1つのグリッドを配置して表示/非表示にしました。「ViewAccessoryDe​​tailCommand」コマンドを「ViewDetail」ボタンにバインドしました。また、コマンドを実行すると、1つの関数が起動し、ポップアップ画面に表示されるプロパティを設定します。

このようなプログラミングコマンドを使用すると、関数が呼び出されますが、プロパティの変更が発生しないため、ビューにポップアップが表示されません。

概要:1つのビュー->ViewModel1->グリッドバインドビューViewModel2->グリッドHaveボタンとOnclickは、ViewModel3とバインドされた新しいグリッドを表示します-このコマンドは起動しますが、プロパティは発生しません。

私の方法論には問題があると思います。提案してください。