我是WPF / XAML的新手,我遇到了一个我不确定如何解决的问题。
我将用一个例子来描述我的问题。我需要开发一个应用程序,它将在这些球场上显示网球场以及球员照片和名字。我创建了两个用户控件:TennisCourt
和TennisPlayer
。 TennisCourt
控件包含4个TennisPlayer
控件实例。
TennisPlayer
的DP类型为Player
,其中包含玩家的姓名和照片。
TennisCourt
有4个类型为Player
的DP:Player1,Player2,Player3,Player4。
每个TennisPlayer
实例都将其Player依赖项属性绑定到包含CourtControl
的Player1..4依赖项属性之一。
我的ViewModel有几个Player类型的对象,当然还有INotifyPropertyChanged
。每当任何一个玩家得到更新时,OnPropertyChanged
都会被调用。
我现在的问题是:当我在我的虚拟机中创建播放器对象时,OnPropertyChanged
会被调用,并且它遍及:VM -> TennisCourt.PlayerX -> TennisPlayer.Player
。我第一次调用它时工作正常。但是,播放器照片是异步获取的,在该操作完成后,VM中每个播放器对象的OnPropertyChanged
将再次被调用。
现在,在做了一些测试之后我注意到,行(TennisCourt
)中的第一个控件确实收到PropertyChanged
通知,并且它再次从VM获取对象。但是,由于Player对象实际上没有更改(引用是同一个对象,它只是对象中的一个字段发生了变化),TennisCourt.PlayerX
属性似乎没有提升其内置{{1} } event,因此绑定OnPropertyChanged
没有任何效果,TennisCourt.PlayerX -> TennisPlayer.Player
字段不会更新。如果我决定在VM中实际更改Player对象,它会更新,但这不是我想要做的。
我做错了吗?这样的级联绑定不是一个好习惯吗?起初我的TennisPlayer.Player
没有任何DP,每个TennisCourt
都直接绑定到VM.Player。这非常有效,直到我创建了TennisPlayer.Player
的第二个实例并希望它显示不同的玩家。
答案 0 :(得分:0)
DependancyProperty
是静态的,因此您的法庭的所有实例都会获得相同的属性。
答案 1 :(得分:0)
使用INotifyPropertyChanged的简单属性,没有依赖属性。