Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

How to use DynamicResource to Load an Image Into a UserControl

$
0
0

I am trying to load an image dynamically into a user control in an MVVM, Prism, Unity type environment.  I have not found any examples specific to what I am attempting, and I would be appreciative if someone could look at my code below and set me on the right track:

My xaml, incomplete as it is, looks like this:

<UserControl x:Class="lp.ImageLab.Views.ImageLabDisplayImageView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:my="clr-namespace:lp.ImageLab.Views"
             mc:Ignorable="d" 
             d:DesignHeight="200" d:DesignWidth="200"><UserControl.Resources><Image </UserControl.Resources><Grid><Image Width="200"><Image.Source><BitmapImage DecodePixelWidth="200" 
                                 UriSource="{DynamicResource ResourceKey=ImageUri}" /></Image.Source></Image></Grid></UserControl>

The codebehind for my view looks like this:

namespace lp.ImageLab.Views
{
    /// <summary>
    /// Interaction logic for ImageLabDisplayImage.xaml
    /// </summary>
    public partial class ImageLabDisplayImageView : UserControl, IRegionMemberLifetime
    { 
        #region Constructor
        public ImageLabDisplayImageView()
        {
            InitializeComponent();
            DataContext = new ImageLabDisplayImageViewModel(this);
        }
        #endregion

        #region IRegionMemberLifetime Members
        public bool KeepAlive
        {
            get { return false; }
        }
        #endregion
    }
}

The command from my menu control where the user picks the image file to load:

        public void OpenImageFile()
        {
            try
            {
                // Create OpenFileDialog
                OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
                // Set filter for file extension and default file extension
                dlg.DefaultExt = ".jpg";
                dlg.Filter = "bitmat images (.jpg)|*.jpg";
                // Display OpenFileDialog by calling ShowDialog method 
                Nullable<bool> result = dlg.ShowDialog();
                // Get the selected file name and display in a TextBox 
                if (result == true)
                {
                    string filename = dlg.FileName;
                    MessageBox.Show(filename);
                    // Initialize
                    m_Publish = "ImageLab";
                    Uri uri = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
                    lp.ImageLab.ViewModels.ImageLabDisplayImageViewModel.ImageUri = uri;
                    var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
                    var imageLabDisplayImageView = new Uri("ImageLabDisplayImageView", UriKind.Relative);
                    regionManager.RequestNavigate("WorkspaceRegion", imageLabDisplayImageView, NavigationCompleted);
                }
            }
            catch (Exception)
            {
                throw new ApplicationException("Failed loading image");
            }
        }

... And my incomplete view model:

namespace lp.ImageLab.ViewModels
{
    public class ImageLabDisplayImageViewModel : ViewModelBase
    {
        #region fields
        ImageLabDisplayImageView m_view;
        private static ImageSource _imageLocation;
        private static Uri _imageUri;
        #endregion
        #region Constructor

        public ImageLabDisplayImageViewModel(ImageLabDisplayImageView view)
        {
            m_view = view;
        }

        #endregion

        public static ImageSource ImageLocation
        {
            get { return _imageLocation; }
            set { _imageLocation = value; }
        }

        public static Uri ImageUri
        {
            get { return _imageUri; }
            set { _imageUri = value; }
        }
    }
}

I apologize for uploading so much code, but I think it is necessary to illustrate where I am in this project; which is pretty much L-O-S-T.  lol


Experience trumps brilliance.


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>