1

私は WPF/XAML にかなり慣れていないので、回避方法がわからない問題に遭遇しました。

例を使用して私の問題を説明します。テニスコートを、プレーヤーの写真と名前とともに表示するアプリを開発する必要があります。と の 2 つのユーザー コントロールを作成TennisCourtしましTennisPlayerた。コントロールには、コントロールTennisCourtの 4 つのインスタンスが含まれていますTennisPlayer

TennisPlayerPlayerには、プレイヤーの名前と写真を含むタイプ の DP があります。

TennisCourtタイプの 4 つの DP がありPlayerます: Player1、Player2、Player3、Player4。

TennisPlayerインスタンスには、含まれている の Player1..4 依存関係プロパティの 1 つにバインドされた Player 依存関係プロパティがありCourtControlます。

私のViewModelにはPlayerタイプのオブジェクトがいくつかあり、もちろん実装してINotifyPropertyChangedいます。いずれかのプレーヤーが更新されるたびに、OnPropertyChanged呼び出されます。

私の問題は次のとおりです。VMでプレーヤーオブジェクトを作成するOnPropertyChangedと、呼び出され、全体を移動します: VM -> TennisCourt.PlayerX -> TennisPlayer.Player. これは、初めて呼び出すときに正常に機能します。ただし、プレーヤーの写真は非同期で取得されており、その操作が終了した後、OnPropertyChangedVM の for each player オブジェクトが再度呼び出されます。

TennisCourtさて、いくつかのテストを行った後、行の最初のコントロール ( ) が通知を受け取り、PropertyChangedVM からオブジェクトを再度取得することに気付きました。ただし、Player オブジェクトは実際には変更されていないため (参照は同じオブジェクトへの参照であり、変更されたのはオブジェクト内のフィールドにすぎません)、TennisCourt.PlayerXプロパティは組み込みOnPropertyChangedイベントを発生させていないように見えるため、バインディングTennisCourt.PlayerX -> TennisPlayer.Playerには何もありません。TennisPlayer.Playerフィールドは更新されません。VM で Player オブジェクトを実際に変更することにした場合、それは更新されますが、それは私がやりたいことではありません。

私は何か間違ったことをしていますか?このようなカスケードバインディングは良い習慣ではありませんか? 最初はTennisCourtDP がなく、それぞれTennisPlayer.Playerが VM.Player に直接バインドされていました。の 2 番目のインスタンスを作成し、TennisCourt別のプレイヤーを表示するまで、これは完全に機能しました。

4

2 に答える 2

0

INotifyPropertyChanged で単純なプロパティを使用し、依存関係プロパティは使用しません。

于 2012-10-08T13:41:16.680 に答える
0

DependancyPropertyは静的であるため、裁判所のすべてのインスタンスが同じプロパティを取得します。

于 2012-10-08T12:02:44.400 に答える