2011-09-13 16 views
1

イメージリソースを私のWPFアセンブリにかなりの時間統合していますが、MVVMアプリケーションでそれらをバインドする本当にきれいな方法は実際には見つかりませんでした。MVVM WPFアプリケーションでイメージリソースにどのようにアクセスしますか?

  • どのようにC#/ VBとXAMLでそれらを参照ください:

    だから私はそれがressourcesアセンブリに来るとき、いくつかのあなたは、stackoverflowのユーザーが、自分の練習を共有することができれば不思議でしたか?
  • コードからコードを公開するときには、どのようなタイプのコードを公開しますか? (BitmapImage、Uri、string、...)
  • ビューから参照するか、ビューモデルでバインドするのが好きですか?
  • 特定のアセンブリを使用して保存していますか?どのようにそれらを整理するのですか?

ご協力いただきありがとうございます;-)

答えて

6

は、これは私が何をすべきかです...

  1. 画像は、このようなプロジェクトのルートフォルダにImagesとして、いくつかのフォルダに保存されています。どのアセンブリにもそれらを保持できます。
  2. 個々の画像はBuild ActionプロパティがResourceタイプに設定されています。
  3. public class ImagePathConverter 
    { 
        public void Convert(...) 
        { 
         return "pack://application:,,,/MyApplicationName;component/Images/" + value.ToString(); 
        } 
    } 
    

... ViewModelにはstringでイメージ名を保持している(プロパティMyImageNameを言う)と、XAMLでSourceImageのオブジェクトにバインドされたとき、私は相対パスとして、それを変換しますMyApplicationNameは、その下にImagesというフォルダを持つ短いアセンブリの名前です。次いで、ビュー・モデル・インスタンスが全体ビュー及び/又は画像のデータcontectに少なくとものデータコンテキストにバインドされていると仮定

XAMLで
  1. 、...

    <Image Source="{Binding Path=MyImageName, Converter={StaticResource ImagePathConverter}}" /> 
    

しかしMVVMを介してWPFプロジェクト内の画像を参照する典型的な方法の1つです。他の方法には、イメージのバイナリストリームがロードされます(resxまたはContentイメージまたはバイナリデータベースから)。この場合、コンバータはBitMapImageSourceに変換します。

+0

あなたのプラクティスを共有していただきありがとうございます。 – Ucodia

+0

ベストプラクティスではありません:)。むしろ、それぞれの画像タイプを表すviewmodelにいくつかの列挙型を作成し、タイプを画像に変換するコンバータを記述したいと思います。はるかに多くのコードが、はるかに優れた保守性とテスト容易性。 –

関連する問題