1

我对 WPF/XAML 比较陌生,遇到了一个我不知道如何解决的问题。

我将用一个例子来描述我的问题。我需要开发一个应用程序,它将显示网球场以及这些球场上的球员照片和姓名。我创建了两个用户控件:TennisCourtTennisPlayer. 该TennisCourt控件包含 4 个TennisPlayer控件实例。

TennisPlayer有一个类型为 的 DP Player,其中包含玩家的姓名和照片。

TennisCourt有 4 个类型的 DP Player:Player1、Player2、Player3、Player4。

每个TennisPlayer实例都有其 Player 依赖属性绑定到包含的 Player1..4 依赖属性之一CourtControl

我的 ViewModel 有几个 Player 类型的对象,当然还实现了INotifyPropertyChanged. 每当任何玩家更新时,OnPropertyChanged都会被调用。

我现在的问题是:当我在我的虚拟机中创建播放器对象时,OnPropertyChanged会被调用,并且它会遍历:VM -> TennisCourt.PlayerX -> TennisPlayer.Player. 我第一次调用它时效果很好。但是,玩家照片是异步获取的,在该操作完成后,OnPropertyChanged再次调用VM中的for each player对象。

现在,在做了一些测试之后,我注意到(TennisCourt)行中的第一个控件确实收到了PropertyChanged通知,并且它再次从 VM 获取对象。但是,由于 Player 对象实际上并没有改变(引用是对同一个对象,它只是对象中的一个字段发生了变化),该TennisCourt.PlayerX属性似乎没有引发其内置OnPropertyChanged事件,因此绑定TennisCourt.PlayerX -> TennisPlayer.Player没有任何效果,并且该TennisPlayer.Player字段不会更新。如果我决定实际更改 VM 中的 Player 对象,它确实会更新,但这不是我想要做的。

我做错什么了吗?这种级联绑定不是一个好习惯吗?起初我TennisCourt没有任何 DP,每个TennisPlayer.Player都直接绑定到 VM.Player。这工作得非常好,直到我创建了第二个实例TennisCourt并希望它显示不同的玩家。

4

2 回答 2

0

仅使用带有 INotifyPropertyChanged 的​​属性,并且没有依赖属性。

于 2012-10-08T13:41:16.680 回答
0

DependancyProperty是静态的,因此您法庭的所有实例都将获得相同的财产。

于 2012-10-08T12:02:44.400 回答