2009-08-11 18 views
25

TabControlのアイテムをObservableCollectionにバインドする最も単純な例は何ですか?TabControlのアイテムをwpfの観測可能なコレクションにバインドする方法は?

各タブのコンテンツには一意のデータがあり、実際にはこのデータにはobservableCollectionsがあり、itemsコンポーネントにバインドされています。

現在、私はユーザーコントロールを用意しています。ユーザーコントロールは、作成されるとすぐに各タブの内容として設定します。また、タブが作成されたときに、この新しいユーザーコントロールのdatacontextを動的に設定する必要があります。ですから、基本的には、tabcontrolのobservablecollectionには、各タブのデータにマップされるモデルビューが含まれています。

さらに、WPFでMVVMに違反することなく、これをすべて実行する必要があります。どんな助け?

非常に高く評価されました!

答えて

35

Basicの例:

<Window.Resources> 

    <DataTemplate x:Key="templateForTheContent" DataType="{x:Type vm:TheViewModelType}"> 
     <v:YourUserControl/> 
    </DataTemplate> 

    <DataTemplate x:Key="templateForTheHeader" DataType="{x:Type vm:TheViewModelType}"> 
     <TextBlock Text="{Binding ThePropertyToDisplayInTheHeader}"/> 
    </DataTemplate> 

</Window.Resources> 

... 

<TabControl ItemsSource="{Binding YourCollection}" 
      ContentTemplate="{StaticResource templateForTheContent}" 
      ItemTemplate="{StaticResource templateForTheHeader}"> 
</TabControl> 
+10

あなたが知っている、WPF + MVVMは、このような急な学習曲線を持っていますが、あなたはそれのこつを得れば解決策は、実際には非常にエレガントできれいです。あなたの助けをありがとう:) – bluebit

+0

私はWPFの学習曲線が急峻であることに同意しますが、私はMVVMパターンについては言及しません...実際には、あなたがそれを使用し始めると非常に自然な感じです:) –

+1

データテンプレート読み取り専用コントロールのみを含む場合、この方法が有効です。 TabControlは、タブページを変更するたびにビューを再作成します。つまり、あるタブから別のタブに切り替えた後、再び元の状態に戻すときに視覚的な状態が失われていることに注意してください。 –

関連する問題