Prism、View First View Injection での MVVM の使用: モジュールにイメージを読み込めません
View First、View Injection パターンを使用して、MVVM パターンで WPF と Prism を使用しています。
私のソリューションには、BannerView.xaml で画像をバインドするだけの SG.BannerModule プロジェクトがあります。BannerViewModel を解決するためにコンテナーを使用しているため、IBannerViewModel を実装する以下の BannerViewModel を使用します。IBannerViewModel インターフェイスは次のとおりです。
public interface IBannerViewModel : IViewModel
{
Uri BannerImageUri { get; set; }
}
インターフェイスを使用して、BannerMainModule のコンテナーを介して BannerViewModel を解決しているため、BannerImageUri を公開しました。
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 プロジェクトの Assets ディレクトリにあります。画像 SGBanner2.png のビルド プロパティをリソースとして設定し、SG.BannerModule プロジェクトの [プロパティ] ペインの [リソース] タブに画像を追加しました。ビュー インジェクションを使用しているため、BannerView.xaml.cs ファイル内の BannerView.xaml のデータ コンテキストを次のように設定しました。
public partial class BannerView : UserControl, IBannerView
{
public BannerView()
{
InitializeComponent();
}
public IViewModel ViewModel
{
get
{
return (IBannerViewModel) DataContext;
}
set { DataContext = value; }
}
}
View First View Injection パターンのため、コード ビハインドで DataContext を設定し、XAML では何も設定しません。
私の質問は
- この画像をバインドしているため、ImageSource コンバーターを使用する必要がありますか? この場合、画像はビットマップではなくpngなので問題ないでしょうか?
- パックウリが問題なのか。このモジュールを SG.WebSite プロジェクトのリージョンで使用しているため、パックの Uri が正しいかどうかはわかりませんが、シェル ウィンドウに画像が表示されない理由を正しくトラブルシューティングできませんでした。困った?
ありがとう!