使用INotifyPropertyChanged从BitmapImage变量绑定Image.Source

时间:2016-02-12 14:50:26

标签: c# win-universal-app windows-10-mobile visual-studio-2015

我想将CurrentWallpaper变量绑定到Image.Source,并在更改时更新Image控件。 那是我的代码:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

在Page标签处,我添加了这个DataContext属性。

<Image x:Name="CurrentWallpaperImage" Source="{x:Bind CurrWall}"/>

这是我的图像控件

StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(path);
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
await CurrentWallpaper.SetSourceAsync(stream);

当我尝试设置新源时,Image控件不会更新。

{include file="common/usergroup.tpl" id=$order_info.user_id}

2 个答案:

答案 0 :(得分:3)

您实际上并没有为页面的CurrentWallpaper属性分配新值。所以OnPropertyChanged没有被触发。

2个选项,或者您仍然使用SetSource方法,但在该行之后自己调用OnPropertyChanged("CurrentWallpaper");以确保更新UI。

或者使用您拥有的流创建一个新的BitmapImage,并完全为您的CurrentWallpaper提供新的bitmapimage。

CurrentWallpaper = newBitmapImage;

答案 1 :(得分:1)

首先,将CurrentWallpaper声明为public属性

private BitmapImage currentWall = new BitmapImage();
public BitmapImage CurrentWallpaper
{
    get { return currentWall; }
    set { currentWall= value; OnPropertyChanged("CurrentWallpaper"); }
}

第二步,将Binding更改为OneWay

<Image x:Name="CurrentWallpaperImage" Source="{x:Bind CurrWall, Mode=OneWay}"/>

如果在第一步或第二步后无效,请尝试手动提升事件

await CurrentWallpaper.SetSourceAsync(stream);
OnPropertyChanged("CurrentWallpaper");