C# Wpf图像控件(绑定到属性)在第一次刷新后未刷新
该控件仅显示第一个图像,如果属性更改(并且触发了事件),则该控件甚至不会再次尝试获取该值。 如果窗口初始化时属性为null,则如果图像稍后被定值,则也不会显示任何内容。 该图像约为2MB位图 这是XAMLC# Wpf图像控件(绑定到属性)在第一次刷新后未刷新,c#,.net,wpf,binding,C#,.net,Wpf,Binding,该控件仅显示第一个图像,如果属性更改(并且触发了事件),则该控件甚至不会再次尝试获取该值。 如果窗口初始化时属性为null,则如果图像稍后被定值,则也不会显示任何内容。 该图像约为2MB位图 这是XAML 这在视图模型中: private BitmapImage _CurrentImg; public BitmapImage CurrentImg { get { return _CurrentImg; } set { _CurrentImg = va
这在视图模型中:
private BitmapImage _CurrentImg;
public BitmapImage CurrentImg
{
get { return _CurrentImg; }
set
{
_CurrentImg = value;
RaisePropertyChanged("CurrentImg");
}
}
public void ButtonCommandExecute()
{
TestAlgo.Next();
this.CurrentImg = TestAlgo.toWpfBitmapImage();
}
最后,这是从System.Drawing.Bitmap创建BitmapImage的方法
public BitmapImage toWpfBitmapImage()
{ return convertBitmapToBitmapSource(this.CurBitmap); }
/// <summary>
/// Converts a <see cref="System.Drawing.Bitmap"/> to <see cref="System.Windows.Media.Imaging.BitmapSource"/>
/// </summary>
/// <param name="bitmap">Source</param>
/// <returns>Converted image</returns>
public static BitmapImage convertBitmapToBitmapSource(System.Drawing.Bitmap bitmap)
{
//salvo la bitmap nel MemoryStream, in modo che lo posso usare come sorgente per una nuova BitmapSource
BitmapImage imageToReturn = new BitmapImage();
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
//creo la nuova BitmapSource da ritornare
stream.Seek(0, SeekOrigin.Begin);
imageToReturn.BeginInit();
imageToReturn.CacheOption = BitmapCacheOption.OnLoad;
imageToReturn.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
imageToReturn.StreamSource = stream;
imageToReturn.EndInit();
}
return imageToReturn;
}
您是否实现了INotifyPropertyChanged接口 设置值后,请在CurrentImg的setter上使用sendPropertyChanged(“CurrentImg”)
private BitmapImage currentImg;
public BitmapImage CurrentImg
{
get { return currentImg; }
set
{
currentImg = value;
SendPropertyChanged("CurrentImg");
}
}
请参考以下链接
所以
按钮命令执行
执行得很好,但图像不变?CurrentImg
属性看起来怎么样?没错,我更新了代码。在事件中更改的属性值为rose,但从未调用get{}。当窗口的dataContext被设置时,get方法只被调用一次,然后就再也不会被调用。是否有可能异步执行ButtonCommandExecute
,或者所有这些都发生在UI线程上?否,都在主线程中。@N4rk0您解决过这个问题吗?我也有同样的问题,但我还没有弄明白为什么会这样;在PropertyChange通知后未调用。是,我有私有BitmapImage\u CurrentImg;公共BitmapImage CurrentImg{get{return}CurrentImg;}set{CurrentImg=value;RaisePropertyChanged(“CurrentImg”);}
private BitmapImage currentImg;
public BitmapImage CurrentImg
{
get { return currentImg; }
set
{
currentImg = value;
SendPropertyChanged("CurrentImg");
}
}