C# Wpf图像控件(绑定到属性)在第一次刷新后未刷新

C# Wpf图像控件(绑定到属性)在第一次刷新后未刷新,c#,.net,wpf,binding,C#,.net,Wpf,Binding,该控件仅显示第一个图像,如果属性更改(并且触发了事件),则该控件甚至不会再次尝试获取该值。 如果窗口初始化时属性为null,则如果图像稍后被定值,则也不会显示任何内容。 该图像约为2MB位图 这是XAML 这在视图模型中: private BitmapImage _CurrentImg; public BitmapImage CurrentImg { get { return _CurrentImg; } set { _CurrentImg = va

该控件仅显示第一个图像,如果属性更改(并且触发了事件),则该控件甚至不会再次尝试获取该值。 如果窗口初始化时属性为null,则如果图像稍后被定值,则也不会显示任何内容。 该图像约为2MB位图

这是XAML


这在视图模型中:

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");
        }
    }