Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中创建赢得';不要每次都初始化_Wpf_User Interface_Mvvm_User Controls_Contentpresenter - Fatal编程技术网

在WPF中创建赢得';不要每次都初始化

在WPF中创建赢得';不要每次都初始化,wpf,user-interface,mvvm,user-controls,contentpresenter,Wpf,User Interface,Mvvm,User Controls,Contentpresenter,我正在开发一个WPF应用程序,它包含一个包装器UI,实际上是MainWindow.xaml,每次用户选择移动到应用程序的不同部分时,其中的内容(ContentPresenter)都会发生更改 当用户返回到主内容时,我希望应用程序不要每次都初始化它,而是以某种方式将它保存在内存中,并在用户单击“主页”按钮时恢复它 在当前状态下,主视图在返回“Home”部分时会一次又一次地初始化,这会导致应用程序速度有点慢。我的问题是:有没有一种方法可以在内存中保留用户控制,这样我就可以快速恢复它 谢谢 隐藏当然是

我正在开发一个WPF应用程序,它包含一个包装器UI,实际上是MainWindow.xaml,每次用户选择移动到应用程序的不同部分时,其中的内容(ContentPresenter)都会发生更改

当用户返回到主内容时,我希望应用程序不要每次都初始化它,而是以某种方式将它保存在内存中,并在用户单击“主页”按钮时恢复它

在当前状态下,主视图在返回“Home”部分时会一次又一次地初始化,这会导致应用程序速度有点慢。我的问题是:有没有一种方法可以在内存中保留用户控制,这样我就可以快速恢复它


谢谢

隐藏当然是@Matt建议的一种选择。另一种方法是探索框架的奇妙世界(Prism、Caliburn、Caliburn.Micro等)

它们在管理WPF应用程序方面提供了很大的帮助


本质上,您需要保留对ViewModel的引用,这是mainviewmodel或mainview中的一个集合,用于跟踪加载的viewmodels。

最终,我决定将
ContentControl
移动到
ItemsControl
中,然后只隐藏除活动控件之外的所有内容控件

以下是我的代码片段:

<ItemsControl ItemsSource="{Binding ViewModels}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ContentControl Visibility="{Binding Visibility}" Content="{Binding ViewModel}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

在我的ViewModel中,我有实际的内容和另一个
Visibility
属性,当内容不是当前内容时,该属性设置为
false
,如果是,则设置为
true


谢谢大家的帮助

要准确地了解您要做的事情有点困难,但您能否将“主页”内容保存在单独的控件中并将其隐藏?根据用户按下的按钮替换的内容实际上绑定到MainWindow.xaml中的
ContentPresenter
,当用户单击另一个工作流按钮时,内容被替换为用户单击的内容,但我希望“主页”内容隐藏起来,而不是在用户每次返回“主页”屏幕时进行处理和重建。如果我使用绑定,我如何隐藏它而不处理它?你不能只将UserControl保存在一个私有变量中?不,当你在UI中重新绑定到它时,它仍然会初始化它。请在重新绑定的地方发布代码。如上所述,我已经用该解决方法解决了这个问题。感谢所有的帮助者!:)