我是WPF/XAML的新手,我遇到了一个问题,我不知道如何解决这个问题。
我将用一个例子来描述我的问题。我需要开发一个应用程序,这将显示网球场与球员的照片和这些球场上的名字。我创建了两个用户控件:TennisCourt和TennisPlayer。TennisCourt控件包含TennisPlayer控件的4个实例。
TennisPlayer有一个Player类型的DP,其中包含球员的姓名和照片。
TennisCourt有4个Player类型的DP: Player1、Player2、Player3、Player4。
每个TennisPlayer实例都将其播放器依赖项属性绑定到包含的CourtControl的Player1..4依赖项属性之一。
我的ViewModel有几个Player类型的对象,当然也实现了INotifyPropertyChanged。每当有任何播放器更新时,OnPropertyChanged都会被调用。
我现在的问题是:当我在VM中创建player对象时,OnPropertyChanged被调用,并且遍历:VM -> TennisCourt.PlayerX -> TennisPlayer.Player。我第一次调用它时,它工作得很好。但是,球员照片是异步获取的,在该操作完成后,将再次调用VM中每个球员对象的OnPropertyChanged。
现在,在做了一些测试之后,我注意到行中的第一个控件(TennisCourt)确实接收到了PropertyChanged通知,并且它再次从VM获取对象。但是,由于播放器对象实际上并没有更改(引用是对同一个对象的引用,它只是更改的对象中的一个字段),因此TennisCourt.PlayerX属性似乎不会引发其内置的OnPropertyChanged事件,因此绑定TennisCourt.PlayerX -> TennisPlayer.Player没有任何效果,TennisPlayer.Player字段也不会更新。如果我决定实际更改VM中的播放器对象,它会更新,但这不是我想要做的。
我做错什么了吗?这样的级联绑定不是一个好的实践吗?起初,我的TennisCourt没有任何TennisPlayer.Player,每个DP都直接绑定到一个VM.Player。在我创建了TennisCourt的第二个实例并希望它能显示不同的玩家之前,它工作得很好。
发布于 2012-10-08 20:02:44
DependancyProperty是静态的,因此您的法庭的所有实例都将获得相同的属性。
发布于 2012-10-08 21:41:17
只使用带有INotifyPropertyChanged的属性,而不使用依赖属性。
https://stackoverflow.com/questions/12777932
复制相似问题