3

MVVMに従ってWPFアプリケーションを作成しています。私のアプリケーションで必要なのは、いくつかの一般的なボタンとテキスト ボックスを含むビューと、TabControl. TabControl は基本的に異なるホストになりますUserControls。そのため、それぞれUserControlに別々ViewViewModel準備ができています。

したがって、私のアプリケーションの構造は次のようになります。

MainWindow.Xaml
    EntryView.Xaml
        Button1
        Button2
        TabControl
            UserControl1 (View)
            UserControl2 (View)
            UserControl3 (View)

私のEntryViewの息子には、タブコントロールがあります。これをバインドする必要があります。

これが私がやったことです。

EntryView.Xaml

<TabControl ItemsSource="{Binding Tabs}" SelectedItem="{Binding SelectedTab}">
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
            <v:UserControl1View/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
            <v:UserControl2View/>
        </DataTemplate>
    </TabControl.ContentTemplate>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="Header"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

EntryViewModel.cs

private ObservableCollection<BaseViewModel> _tabs;
public ObservableCollection<BaseViewModel> Tabs
{
    get
    {
        if (_tabs == null)
        {
            _tabs = new ObservableCollection<BaseViewModel>();
            _tabs.Add(new UserControl1ViewModel());
            _tabs.Add(new UserControl2ViewModel());
        }
        return _tabs;
    }
}

しかし、アプリケーションを実行しても何も起こりません。TabControl が空です。ビューモデルのタブ内にブレークポイントを入れたのですがヒットしませんでした。質問 1 は、これを正しく行っているかどうかです。いいえの場合、どうすればよいですか?

4

2 に答える 2

5

まず、私のマシンでは次のエラーが表示されるため、あなたのマシンでどのようにコンパイルされるかわかりません。

プロパティ「ContentTemplate」は一度しか設定できません。

ただし、移動DataTemplatesするTabControl.Resourcesとコンパイルされ、正常に動作します。

<TabControl>
   <TabControl.Resources>
      <DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
         <v:UserControl1View/>
      </DataTemplate>
      <DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
         <v:UserControl2View/>
      </DataTemplate>
   </TabControl.Resources>
   <TabControl.ItemTemplate>
      <DataTemplate>
         <TextBlock Text="Header"/>
      </DataTemplate>
   </TabControl.ItemTemplate>
</TabControl>
于 2013-06-12T12:24:24.160 に答える