2012-10-08 160 views
1

我对WPF/XAML比较陌生,而且遇到了一个我不确定如何解决的问题。依赖属性“级联”绑定

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

+0

请发布您的xaml for usercontrol绑定 – blindmeis

回答

0

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

0

使用简单的属性与INotifyPropertyChanged并没有依赖项属性。