网格背景ImageSource绑定打破了从后台Windows Phone 8返回的应用程序

时间:2014-04-03 09:42:23

标签: c# windows-phone-8 binding background imagesource

我正在关注this guide from Microsoft加载与分辨率相关的图片作为我应用的背景。

例如,在我的“关于”页面中,我有这段代码

<Grid>
    <Grid.Background>
        <ImageBrush ImageSource="{Binding BestResolutionImage, Source={StaticResource MultiResImageChooser}}"/>
    </Grid.Background>
    <!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Margin="12,0,12,0">

    <phone:Pivot Title="ABOUT"  x:Name="helPagePiv">
        <!--Pivot item one-->
        <phone:PivotItem Header="about us">
            <controls:About />
        </phone:PivotItem>

        <!--Pivot item two-->
        <phone:PivotItem Header="change log">
            <controls:ChangeLog />
        </phone:PivotItem>
    </phone:Pivot>

</Grid>
</Grid>

它工作正常但是当我点击启动电子邮件应用程序的链接或将我的应用程序放在后台的浏览器控件时会出现问题。当我使用后面的硬件按钮返回我的应用程序时,不会重新加载背景图像,导致背景空白。

我想我必须在某个地方使用INotifyPropertyChanged。无论如何,当我返回我的应用程序时,如何确保背景图像被刷新?

更新 我已经尝试更改绑定Mode,但这并没有任何不同。

更新2 Windows Phone 8.1中似乎没有此问题。如果我要更新到8.1,那么现在好了。

1 个答案:

答案 0 :(得分:0)

您必须在MultiResImageChooser类中实现INotifyPropertyChanged。 您必须在此属性的setter中为BestResolutionImage属性引发属性更改事件。

public class MultiResImageChooser : INotifyPropertyChanged
{
    public event NotifyPropertyChangedArgs PropertyChanged;

    ...

    public ImageSource BestResolutionImage
    {
        get
        {
            return _bestResolutionImage;
        }
        set
        {
            if(value != _bestResolutionImage)
            {
                _bestResolutionImage = value;
                OnPropertyChanged("BestResolutionImage");
            }
        }
    }

    protected virtual void OnPropertyChanged(string property)
    {
        if(null != PropertyChanged)
        {
            PropertyChanged(this, new NotifyPropertyChangedEventArgs(property));
        }
    }
}