2011-07-08 6 views
1

私はアイテムのリストを持っていると言います。だから私は2つのビュー:ListViewとItemViewがあります。MVVMビューバインディング

私は2つのViewModels:ListViewModelとItemViewModelも持っています。 ListViewModelで

は、私が作成し、ItemViewModelsののObservableCollectionを初期化します。 ListViewにはItemTemplate - > ItemViewを持つListBoxがあり、ItemSourceはListViewModelにObservableCoolectionにバインドされています。 それぞれのItemViewを各ItemViewModelにバインドして、ItemView.xamlへのバインディングを使用できるようにしたいのですが、それを達成できません。

+0

です。 – Ivo

+0

私は最後の文章を理解できません.XAMLとコードを投稿できますか? – anivas

答えて

2

私はあなたの質問から理解することは、あなたはItemView.xamlにItemViewModelをバインドしたいとあなたのListBoxは、他のいくつかのXAML(ListBox.xamlを言う)に常駐しています。 ListBox.xamlのItemViewmodelおよびItemVIewに関連するバインドを適用したくない場合。これが問題だった場合、あなた は簡単そう達成するためにDataTemplateマッピングを作成することができます

<Window 
    xmlns:vw="namespace of your view files (i.e. xaml files. ListBox.xaml and ItemView.xaml)" 
    xmlns:ViewModels="namespace of your view model files (i.e. ItemViewModel.cs, ListBoxViewModel.cs)"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type ViewModels:ItemViewModel}"> 
       <vw:ItemView /> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <ListBox ItemsSource="{Binding Path=List of ItemViewmodel in ListBoxViewModel.cs}" 
    </Grid> 
</Window> 

はその後、あなたはそれが任意のキーなしでリソースに指定されているように、クラスがItemViewにマッピングされますItemViewModel。 ItemView.xamlでバインディングを適用できるようになりました。 ListBoxのItemtemplateを割り当てる必要はありません。自動的に解決されます。あなたは(およびリソースに指定する必要はありません)とにかくItemTemplateにを指定したい場合は、これを書く:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <vw:ItemView /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

いずれかの方法で動作するはずです:)これは、Silverlightの

+0

ありがとう、それは素晴らしい仕事! – Ivo