依赖属性“级联”绑定

时间:2012-10-08 08:31:05

标签: wpf xaml binding dependency-properties

我是WPF / XAML的新手,我遇到了一个我不确定如何解决的问题。

我将用一个例子来描述我的问题。我需要开发一个应用程序,它将在这些球场上显示网球场以及球员照片和名字。我创建了两个用户控件:TennisCourtTennisPlayerTennisCourt控件包含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的第二个实例并希望它显示不同的玩家。

2 个答案:

答案 0 :(得分:0)

DependancyProperty是静态的,因此您的法庭的所有实例都会获得相同的属性。

答案 1 :(得分:0)

使用INotifyPropertyChanged的简单属性,没有依赖属性。