0

複数のアイテムを含むタブコントロールを持つメインウィンドウを作成しようとしています(それぞれがオンデマンドでのみ表示されます)...たとえば、タイプAのアイテム、タイプBのアイテム、およびタイプCのアイテムがあるとします(MVVMパターンを使用) )私のタブアイテムを表し、ユーザーコントロールに関連するオブジェクトの監視可能なコレクションを持つこと(各タブアイテムはユーザーコントロールです)...問題は、それを行う方法がわからなかったことです。

私はtabItemViewModelBaseクラスを持っています:

 public class TabItemViewModelBase : ViewModelBase
    {

        //Fields : 
        RelayCommand _closeCommand;


        //Constructor:
        public TabViewModel(string header)
        {
            this.Header = header;
        }

}

私のメインウィンドウデータコンテキストでは、このクラスの観察可能なコレクションがあります:

 //Propriétés
        ObservableCollection<TabViewModel> _tabItems;

私のメインウィンドウには、TabControlアイテムの次のタグがあります

 <TabControl Padding="0" ItemsSource="{Binding Path=Workspaces}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Header}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    **<view:ClientView/>**
                </DataTemplate>
            </TabControl.ContentTemplate>

        </TabControl>

ご覧のとおり、すべてのアイテムはClientViewユーザーコントロールにアタッチされており、tabviewitemを使用してアイテムを作成しています。プロパティまたはobservablecollectionの各要素のコンテンツフォームを指定する方法が必要です...

(ClientListingViewModelクラスとClientCreationViewModelクラスがあります)、それぞれのビューを指定する方法がわからないため、両方を使用することはできません。

ありがとう!

4

1 に答える 1

4

特定のビューモデルを対象とするビューを指定するには、データ テンプレートでこれを行うことができます。

最初に、ビューとビューモデルの名前空間に名前空間の参照を追加する必要があります。Window を使用した例を含めましたが、UserControls でも機能します。

<Window ...
        xmlns:v="clr-namespace:PutYourViewNamespaceHere"
        xmlns:vm="clr-namespace:PutYourViewModelNamespaceHere">

次に、コンテナーのリソース セクションでデータ テンプレートを定義する必要があります。以下の例では、ClientListingViewModel のデータ テンプレートとして ClientListingView を使用しています。

<Window.Resources>
     <DataTemplate DataType="{x:Type vm:ClientListingViewModel">
          <v:ClientListingView />
     </DataTemplate>
     <DataTemplate DataType="{x:Type vm:ClientCreationViewModel">
          <v:ClientCreationView />
     </DataTemplate>
</Window.Resources>
于 2013-02-21T11:37:33.217 に答える