2011-07-08 5 views
1

これを達成する最良の方法はわかりません。MEFデータを必要とするViewModelをSilverlight用にインポートする

public partial class MyPage : Page 
{ 
    [Import] 
    public MyVM ViewModel 
    { 
     get { return DataContext as MyVM ; } 
     set { DataContext = value; } 
    } 

    public String EventName { get; set; } 
    public MyPage() 
    { 
     InitializeComponent(); 
     CompositionInitializer.SatisfyImports(this); 
    } 

    // Executes when the user navigates to this page. 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    {  } 
} 

そして、私のVM:

[Export] 
public class MyVM : ViewModelBase 
{ 
    public MyVM() 
    { 

    } 
} 

これは素晴らしい作品ここに私の見解です。しかし、私は文字列を持っているviewmodelかURLからデータを取得する必要があります。どちらの方法でも、MEFを使用してMyVWに文字列を取得する最善の方法はわかりません。 私はMVVMLightからのメッセージングを使用しますが、MyVMクラスはまだ他のViewModelからブロードキャストを受信するためにインスタンス化されていません。

[Export("hello")] 
public String MyHello { get; set; } 

が、それは私にエラーを与えた:

[Export] 
public class MyVM : ViewModelBase 
{ 
    public MyVM ([Import("hello")]string hello) 
    { 

    } 
} 

、その後ビューでこれを置く:それでは、私はこれを試してみましょう、よく考えました。 1つ以上のExportAttributesでマークされているため、 'Form A'型のオブジェクトでSatisfyImportsを呼び出すことはできません。

これを達成するための最良の方法は何ですか?

+0

あなたはどこからどこのVMにデータを渡したいですか? –

+0

@ derek-beattie別のビューモデルまたはビューから(URLから) – Mike

答えて

0

ビュー間でデータを共有するために、私は通常SharedDataオブジェクトを自分のViewModelに挿入します。私もカリバーンマイクロフレームワークを使用してい

[Import(RequiredCreationPolicy = CreationPolicy.Shared)] 
public ISharedData SharedData { get; set; } 

ので、私は、URLのクエリ文字列を経由して周囲にデータを渡していませんよ。規約では、CMはURLパラメータを解析してVMのプロパティに注入しますが、この機能がWindows Phone開発にのみ適用されるかどうかはわかりません。 here

から

は、ページののQueryStringを調べます。 のQueryStringパラメータに一致するVMのプロパティについては、 を参照して、 強制を実行して、 を挿入します。

データをビューからvmに渡す可能性があるとすると、データバインディングによって発生するはずです。

+0

ビューからビューモデルにデータを送信するためにデータバインディングを使用する必要があることを知っています。基本的に私が望むのは、ユーザーがwww.hello.com/NewPage/XYZにアクセスし、ビューモデルで使用されているURIからパラメータXYZを取得できることです。私はOnNavigatedTo関数を使ってXYZをe.URI.ToString()で取得し、そこから解析することができますが、CodeBehindにあり、MEFは既にViewModelをインスタンス化しています。 VMのコンストラクタのパラメータ内にある – Mike

+0

したがって、NavigationContextをバインドする必要があります。このような何か:http://stackoverflow.com/questions/6020081/mvvm-silverlight-and-page-navigation –

+0

私はそのメソッドを実装しようとしましたが、NavigationContextのための私のviewmodelのプロパティは決して取得何かに設定します。 "xmlns:helper =" clr-namespace:MyApp.Helpers " DataContext =" {バインディングソース= {StaticResource VMLocator}、コンバータ= {StaticResource VMIndexerConverter}、ConverterParameter = MyViewModel} " xmlns:navigation =" clr-namespace: System.Windows.Controls; assembly = System.Windows.Controls.Navigation " ヘルパー:ナビゲータ。Source = "{Binding}" ' Navigator Attachedプロパティのいずれも呼び出されませんが、VMはまだインスタンス化されています。 – Mike

関連する問題