1

I try to follow code to set image source in WPF, when i want to delete old and set new image, rightly but image not refresh and show old picture. why?

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

string subpath = "UserProfile";
Directory.CreateDirectory(subpath);


// Set filter for file extension and default file extension 
dlg.DefaultExt = ".jpg";
dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
// Display OpenFileDialog by calling ShowDialog method 
if (dlg.ShowDialog() == true)
{
       string fileName = "pic" + txtEmployeeID.Text + ".jpg";
       string newPath = "\\" + subpath + "\\" + fileName;

       if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
       {
            imgUser.Source = null;
            File.Delete(Directory.GetCurrentDirectory() + newPath);
       }

  File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

       ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
       imgUser.Source = imageSrc;

}



 public static ImageSource BitmapFromUri(Uri source)
 {
      var bitmap = new BitmapImage();
      bitmap.BeginInit();
      bitmap.UriSource = source;
      bitmap.CacheOption = BitmapCacheOption.OnLoad;
      bitmap.EndInit();
      return bitmap;
 }
0

1 Answer 1

1

Try this, Works for me.

        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(source.AbsoluteUri);
        bitmap.EndInit();
        return bitmap;

Full Source Code

  public MainWindow()
    {
        InitializeComponent();

        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

        string subpath = "UserProfile";
        Directory.CreateDirectory(subpath);


        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".jpg";
        dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
        // Display OpenFileDialog by calling ShowDialog method 
        if (dlg.ShowDialog() == true)
        {
            string fileName = "pic" + txtEmployeeID.Text + ".jpg";
            string newPath = "\\" + subpath + "\\" + fileName;

            if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
            {
                imgUser.Source = null;
                File.Delete(Directory.GetCurrentDirectory() + newPath);
            }

            File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

            ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
            imgUser.Source = imageSrc;

        }





    }

    public static ImageSource BitmapFromUri(Uri source)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(source.AbsoluteUri);
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.EndInit();
        return bitmap;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

        string subpath = "UserProfile";
        Directory.CreateDirectory(subpath);


        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".jpg";
        dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
        // Display OpenFileDialog by calling ShowDialog method 
        if (dlg.ShowDialog() == true)
        {
            string fileName = "pic" + DateTime.Now.Millisecond + ".jpg";
            string newPath = "\\" + subpath + "\\" + fileName;

            if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
            {
                imgUser.Source = null;
                // File.Delete(Directory.GetCurrentDirectory() + newPath);
            }

            File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);

            ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
            imgUser.Source = imageSrc;

        }
    }

Xaml

 <Image x:Name="imgUser" Margin="88,70,49,72"> </Image>

    <Button Margin="0,277,425,0" Click="Button_Click"> </Button>
Sign up to request clarification or add additional context in comments.

8 Comments

@MasoudAMR will you try this , please work fine for me. Until new Uri is invoked it will not update the source
Binding works in wpf wonderful , I would suggest to use that Mvvm Implmentation of Image Change
how/where do use this?
MVVM is pattern that is mostly used in WPF ,Silverlight and WP8 . It separate your view => View Model => Model . Mvvm tutorials . It is well appreciated pattern for maintainability and scalability and testing each layer.
any answers aren't for my question.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.