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つのタブが開いていて、内側のタブの間のフレームを切り替えたいときに私の問題があるので、私はしたくない内部ホストされているページの新しいインスタンスを作成、自動的に更新されます。なぜそれが私の起こっているかもしれない任意のアイデア?
を制御し表示されますFrameSource'プロパティ 'には' PropertyChanged'イベントはありませんので、どのようにそのフレームは常に見ることができます'Tabs'をクリックすると更新されますか? – StepUp