Ich habe die dynamische Tab-Erstellung in WPF mit dem MVVM-Muster implementiert. In jedem Tab befindet sich ein Frame und der Frame hostet eine Page.Rahmen in Tabcontrol werden immer aktualisiert, wenn auf verschiedene Registerkarten geklickt wird.
<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>
Mein ViewModel sieht so aus.
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; }
}
Nun mein Problem ist, wenn mehr als 1 Tabs geöffnet ist und im Inneren zwischen Tabs den Rahmen wechseln möchten automatisch aktualisiert wird, damit neue Instanzen von Seiten innerhalb gehosteten schaffen, die ich nicht will. Irgendeine Idee, warum es mir passieren könnte?
Es gibt keine 'PropertyChanged' Veranstaltung in' FrameSource' Eigenschaft, so wie es immer, dass Frame ist zu sehen aktualisiert, wenn Sie auf "Tabs" klicken? – StepUp