C# WPF UserControl-预加载UserControl

C# WPF UserControl-预加载UserControl,c#,.net,wpf,powerpoint,C#,.net,Wpf,Powerpoint,我有一个主窗口和4个用户控件。通过将DataContext切换到我的UserControls,我可以拥有一个具有多个“页面”的应用程序。在每个用户控件中,我都有一个显示PowerPoint的webBrowser控件(so->4 UC=4 ppt)。现在的问题是,当我切换DataContext(切换页面)时,我必须再次在webBrowser中加载(调用navigate方法)整个ppt,这需要一些时间。我怎样才能解决这个问题 提前感谢:)) 阿德里安 编辑代码 MainWindow.xaml <

我有一个主窗口和4个用户控件。通过将DataContext切换到我的UserControls,我可以拥有一个具有多个“页面”的应用程序。在每个用户控件中,我都有一个显示PowerPoint的webBrowser控件(so->4 UC=4 ppt)。现在的问题是,当我切换DataContext(切换页面)时,我必须再次在webBrowser中加载(调用navigate方法)整个ppt,这需要一些时间。我怎样才能解决这个问题

提前感谢:))

阿德里安

编辑代码

MainWindow.xaml

<Window.Resources>
    <DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}" >
        <views:Page1 DataContext="{Binding}"/>
    </DataTemplate>
    <DataTemplate x:Name="Page2Template" DataType="{x:Type viewmodels:Page2Model}">
        <views:Page2 DataContext="{Binding}"/>
    </DataTemplate>
    <DataTemplate x:Name="Page3Template" DataType="{x:Type viewmodels:Page3Model}">
        <views:Page3 DataContext="{Binding}"/>
    </DataTemplate>
    <DataTemplate x:Name="Page4Template" DataType="{x:Type viewmodels:Page4Model}">
        <views:Page4 DataContext="{Binding}"/>    
</Window.Resources>
例如,我的UserControl1:(当我每次ppt再次打开时调用UC1时,我只想打开它一次):


我希望我说得很清楚:S

主窗口中。xaml
将视图放置在
堆栈面板中
以使
可见
隐藏显示如下

<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}">
 <StackPanel Visibility="{Binding Page1}">
  <views:Page1 DataContext="{Binding}"/>
 </StackPanel>
</DataTemplate>
private Visibility page1;
public Visibility Page1
{
    get { return page1; }
    set { page1 = value; }
}
然后在
MainWindowLoad
函数中初始化每个视图的
DataContext
,以便预加载。之后,您可以在每个菜单单击功能中设置每个视图的可见性,如下所示:
Page1=可见性。可见
Page1=可见性。已折叠

我希望它能起作用。

您可以这样尝试,在页面加载时将所有用户控件作为默认值预加载,然后您可以根据您的权限设置可见性
true
false
。好的,谢谢,我该怎么做D.目前我正在使用一个内容控件,该控件在我的主窗口中显示Usercontrols(每个Usercontrols都有自己的ViewModel)。您能否共享引用代码,以便我可以为您提供一个提取解决方案。您可以通过编辑问题本身来发布代码。问题已编辑^^等一下,我会处理它。理论上这是可行的,但当我这样做时,DataContext=new Page1Model();DataContext=新的Page2Model();在我的窗口加载函数中,它只接受最新设置的DataContext,jsut显示第2页。我是否正确初始化了DataContext?为每个视图添加单独的加载,并参考相应的
DataContext
,就像这样
页面加载的函数不会被触发,为什么?
private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        powerPointBrowser1.Navigate("somePPTfile.pptx");
        powerPointBrowser1.LoadCompleted += powerPointBrowser1_LoadCompleted;
    }
<DataTemplate x:Name="Page1Template" DataType="{x:Type viewmodels:Page1Model}">
 <StackPanel Visibility="{Binding Page1}">
  <views:Page1 DataContext="{Binding}"/>
 </StackPanel>
</DataTemplate>
private Visibility page1;
public Visibility Page1
{
    get { return page1; }
    set { page1 = value; }
}