使用棱镜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中设置任何值。
我的问题是
- 因为我结合这个形象,我需要使用一个ImageSource的转换器?如果是这样的话,会不会是一个问题,因为图像是png而不是位图?
- 还是Pack Uri的问题。因为我在我的SG.WebSite项目的一个区域使用了这个模块,所以我不确定我的包Uri是否正确,但是我无法正确地拍摄为什么我的图像没有显示在我的shell窗口中。 难倒?
谢谢!