2013-03-18 57 views
0

使用棱镜MVVM与视图第一视图注入:无法加载模块中的图像如何使用Prism和MVVM和ViewFirst View Injection将图像加载(绑定)到viewmodel中的属性?

我在MVVM模式中使用WPF和棱镜使用视图第一视图注入模式。

在我的解决方案中,我有一个SG.BannerModule项目,我只想在我的BannerView.xaml中绑定图像。 我使用下面的BannerViewModel来实现IBannerViewModel,因为我使用容器来解析我的BannerViewModel。 这里是IBannerViewModel接口:

public interface IBannerViewModel : IViewModel 
{ 
    Uri BannerImageUri { get; set; } 
} 

我露出BannerImageUri因为我解决BannerViewModel通在使用界面上的 BannerMainModule容器。

的BannerViewModel实现

public class BannerViewModel : ViewModelBase, IBannerViewModel 
{ 

    #region Properties 

    private IUnityContainer _container; 
    private ILogger _logger; 

    private Uri _bannerImageUri; 
    public Uri BannerImageUri 
    { 
     get { return new Uri("pack://SG.Website:,,,SG.BannerModule;component/Assets/SGBanner2.png"); } 
     set 
     { 
      if (value != _bannerImageUri) 
      { 
       _bannerImageUri = value; 
       OnPropertyChanged("BannerImageUri"); 
      } 

     } 
    } 

    #endregion 

    #region Constructors 

    public BannerViewModel(IBannerView bannerView, IUnityContainer container) 
     : base(bannerView) 
    { 
     View = bannerView; 
     View.ViewModel = this; 

     _container = container; 
     _logger = _container.Resolve<ILogger>(); 

     _logger.WriteToLogs("BannerViewModel Constructor"); 
    } 
    #endregion 

} 

的图像是位于我SG.BannerModule项目的资产目录。 我已经将图像SGBanner2.png的生成属性设置为资源,并且在SG.BannerModule项目的属性窗格的资源选项卡中添加了图像。 我以下面的方式在BannerView.xaml.cs文件中设置了BannerView.xaml的数据上下文,因为我正在使用View注入。

public partial class BannerView : UserControl, IBannerView 
{ 
    public BannerView() 
    { 
     InitializeComponent(); 
    } 

    public IViewModel ViewModel 
    { 
     get 
     { 
      return (IBannerViewModel) DataContext; 
     } 
     set { DataContext = value; } 
    } 

} 

由于View First View注入模式,我在后台代码中设置DataContext,并且不在XAML中设置任何值。

我的问题是

  1. 因为我结合这个形象,我需要使用一个ImageSource的转换器?如果是这样的话,会不会是一个问题,因为图像是png而不是位图?
  2. 还是Pack Uri的问题。因为我在我的SG.WebSite项目的一个区域使用了这个模块,所以我不确定我的包Uri是否正确,但是我无法正确地拍摄为什么我的图像没有显示在我的shell窗口中。 难倒?

谢谢!

回答

0

就这么你知道,看来你首先使用ViewModel。让您的ViewModel解析您的视图,然后可能调用region.Add(viewModel.View)。

这是本地资源文件packURI语法:

包://应用:,,, /子文件夹/ ResourceFile.xaml

仅供参考资源文件:

包://应用程序:,,,/ReferencedAssembly;组件/子文件夹/ ResourceFile.xaml

相关问题