我对WPF/XAML比较陌生,而且遇到了一个我不确定如何解决的问题。依赖属性“级联”绑定
我将用一个例子来描述我的问题。我需要开发一个应用程序,该应用程序将显示网球场以及这些球场上的球员照片和姓名。我创建了两个用户控件:TennisCourt
和TennisPlayer
。 TennisCourt
控件包含TennisPlayer
控件的4个实例。
TennisPlayer
有一个类型为Player
的DP,其中包含玩家的名字和照片。
TennisCourt
有4个DP类型Player
:玩家1,玩家2,玩家3,玩家4。
每个TennisPlayer
实例都将其Player依赖项属性绑定到包含CourtControl
的Player1..4依赖项属性之一。
我的ViewModel有几个Player类型的对象,当然实现了INotifyPropertyChanged
。每当任何玩家得到更新时,OnPropertyChanged
被调用。
现在我的问题是:当我在虚拟机中创建播放器对象时,OnPropertyChanged
被调用,并且它遍历整个:VM -> TennisCourt.PlayerX -> TennisPlayer.Player
。这在我第一次打电话时效果很好。但是,玩家照片是异步获取的,在该操作完成之后,再次调用VM中每个玩家对象的OnPropertyChanged
。
现在,在我做了一些测试之后,我注意到该行中的第一个控件(TennisCourt
)确实收到PropertyChanged
通知,并且它再次从VM获取对象。但是,由于Player对象实际上并没有改变(引用的是同一个对象,它只是对象中的一个字段发生了改变),所以TennisCourt.PlayerX
属性看起来并没有提高其内置的OnPropertyChanged
事件,所以绑定TennisCourt.PlayerX -> TennisPlayer.Player
会没有任何影响,并且TennisPlayer.Player
字段不会更新。如果我决定实际更改VM中的Player对象,它会更新,但这不是我想要做的。
我做错了什么?这种级联绑定不是一种好的做法吗?起初,我的TennisCourt
没有任何DP,并且每个TennisPlayer.Player
都直接绑定到VM.Player。这工作得很好,直到我创建TennisCourt
的第二个实例,并希望它显示不同的玩家。
请发布您的xaml for usercontrol绑定 – blindmeis