2012-04-27 11 views
2

静的リソースをXAMLファイルに作成する必要があります。 パラメータを持つ静的リソースコンストラクタ

<Window.Resources> 
    <vm:ViewModel x:Key="viewModel" /> 
</Window.Resources> 

は、私は私のコンボボックス

ItemsSource="{Binding Source={StaticResource viewModel}, Path=GetItems, Mode=TwoWay}" 

ためのアイテムを取得するには、この静的なリソースを必要とするしかし、どのように私はクラスの後ろに私のコードのViewModelに(コンストラクタ)のインスタンスを与えることができますか?

+0

あなたのViewModelがあなたのコードのクラスのインスタンスを必要とするのはなぜですか? – Mark

答えて

7

これを正しく理解すると、MVVMパターンに違反しています。 コンボボックスからアイテムをVMに提供しないでください。むしろVMからアイテムを提供し、それをコンボボックスにバインドする必要があり、アイテムにアクセスする際に問題はありません。

0

さて、あなたはコードからそれを行うことができ、私はコードからすべて、またはあなたを意味 ObjectDataProviderを使用することにより、(あなたのアプリがarchitcted方法によって異なります)を試すことができます。例えば

:この場合

<ObjectDataProvider ObjectType="{x:Type ViewModel}" x:Key="viewModel"> 
     <ObjectDataProvider.ConstructorParameters> 
       <StaticResource ResourceKey="dataProvider"/> 
     </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider > 

は、当然、あなたがpovoderのCTORに渡すパラメータは、あまりにもリソースでなければなりません。

+2

@downvoter:説明する気に? – Tigran

2

MVVMパターンに従って、ビューとビューモデルをバインドすることを理解しています。

ビューで直接ビューモデルを参照するべきではありません。それ以外の場合は、ビューモデルを強力に結合してください。 MVVMパターンによると、あなたは背後にあるコードでDataContextの

によって夫婦彼らは(ファイルApp.xaml.csで例えば)それはあなたののviewmodelクラスでその後、その

yourWindow.DataContext = yourViewModel 

のように見えるはずですあなたがのgetItems

ItemsSource="{Binding GetItems, Mode=TwoWay}" 
にあなたのリストボックスをバインドあなたのウィンドウで最後に のgetItems

をという名前のプロパティを持っています3210

関連する問題