2016-05-11 18 views
0

MVVMパターンを使用して動的タブの作成をWPFで実装しました。各タブの内側にはフレームがあり、フレームはページをホストしています。TabControl内のフレームは、別のタブをクリックすると常にリフレッシュされます

<TabControl Name="mainTabControl" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ObservableCollectionTabContent}" > 
      <TabControl.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"> 
        </TextBlock> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 
      <TabControl.ContentTemplate> 
       <!--this is the body of the TabItem template--> 
       <DataTemplate> 
        <Frame NavigationUIVisibility="Hidden" 
        Source="{Binding FrameSource}" /> 
       </DataTemplate> 
      </TabControl.ContentTemplate> 
     </TabControl> 

私のViewModelは次のようになります。

public class MainWindowViewModel 
    { 
     private TabContent tabContent; 
     public ObservableCollection<TabContent> ObservableCollectionTabContent { get; set; } 
     public MainWindowViewModel() 
     { 

      ObservableCollectionTabContent = new ObservableCollection<TabContent>(); 
     } 



     public void NewTab(String header, String navigatePageUri) 
     { 

      tabContent = new TabContent { Header = header, FrameSource = navigatePageUri }; 

      this.ObservableCollectionTabContent.Add(tabContent); 

      // Set the new tab to be the current tab 
      ICollectionView collectionView = CollectionViewSource.GetDefaultView(this.ObservableCollectionTabContent); 
      if (collectionView != null) 
      { 
       collectionView.MoveCurrentToNext(); 

      } 

     } 

    } 

     public sealed class TabContent 
    { 
      public String Header { get; set; } 
      public String FrameSource { get; set; } 

    } 

は今以上1つのタブが開いていて、内側のタブの間のフレームを切り替えたいときに私の問題があるので、私はしたくない内部ホストされているページの新しいインスタンスを作成、自動的に更新されます。なぜそれが私の起こっているかもしれない任意のアイデア?

+0

を制御し表示されますFrameSource'プロパティ 'には' PropertyChanged'イベントはありませんので、どのようにそのフレームは常に見ることができます'Tabs'をクリックすると更新されますか? – StepUp

答えて

0

TabControlすべてのタブが表示されたら、内容を再構成します。これは設計によるものです。 タブが選択されなくなっても状態を保持するようにするには、独自のカスタムタブを実装する必要があります。

あなたがこの問題をグーグル場合、あなたは自分のステートフルタブを書く人々の例の多くは

関連する問題