我有一个MainPage和一个DetailPage。它们都使用静态类来接收数据。这个名为DataService的类实现了INotifyPropertyChanged接口,它实现了一个名为“IsLoading”的属性。每当调用DataService中的方法时,我都将IsLoading设置为true。 DataService本身包含在一个名为Globals的静态类中,它实例化DataService(我知道,我将使用单例模式实现它)
在MainPage上,它们是一个弹出窗口:
<Page.Resources>
<Common:DataService x:Key="DataService" />
</Page.Resources>
<Popup IsOpen="{Binding IsLoading}" DataContext="{StaticResource DataService}">...</PopUp>
在MainPage上一切正常。如果DataService从Web服务请求某些内容,则会显示弹出窗口。如果完成,弹出窗口会隐藏。
如果我使用Frame.Navigate(typeof(DetailPage));
进行更改并且DetailPage开始调用dataservice的某些方法,则弹出窗口也会显示,但不会显示在与主页面相同的页面上。它将显示在左上角。
有趣的是:如果我回到MainPage并加载数据,我会得到两个弹出窗口。如果我再次访问DetailPage,则会出现第三个弹出窗口,依此类推。似乎这个弹出窗口被实例化了?!
下一点:在OnNavigatingTo
中设置Popup的DataContext并删除OnNavigatingFrom
中的DataContext时,我将继续使用我想要的弹出窗口,并且没有第二个实例化。
这里出了什么问题?