我目前有一个MainWindow,它充当浏览到解决方案中其他页面的框架。问题是,我需要在应用程序的整个过程中实例化我的页面之一,而不是每次导航到页面时都要实例化该页面。我已经为页面尝试了KeepAlive='true'
属性,但是没有用。
我想知道是否有一种方法可以为我的代码实现“页面的静态实例”方法。谢谢。 (我不希望或计划实施MVVM方法)
public MainWindow()
{
InitializeComponent();
//Instanciate ApiStartup class and Initialize the HTTPClient
ApiStartup.InitializeClient();
Application.Current.MainWindow = this;
Loaded += OnMainWindowLoaded;
}
private void OnMainWindowLoaded(object sender, RoutedEventArgs e)
{
ChangeView(new DetectionPage());
}
public void ChangeView(Page view)
{
MainFrame.NavigationService.Navigate(view);
}
private void quiz_Click(object sender, MouseButtonEventArgs e)
{
var mainWindow = (MainWindow)Application.Current.MainWindow;
mainWindow?.ChangeView(new DetectionPage());
}
答案 0 :(得分:0)
如果要始终使用静态值在整个应用程序中使用,则可以在app.config文件中提及它。而且,您可以轻松地在任何xaml文件中使用((App)Application.current).KeepAlive
。
答案 1 :(得分:0)
页面具有keepalive属性。
您可以在任意页面上将其设置为true。 以后使用导航方法导航到该URL时,将返回页面的第一个实例。
如果由于任何原因都不适合,则可以使用具有键类型和值页面(实例)的字典来缓存页面实例。然后实施一些逻辑来决定您在其中缓存或不缓存的页面。
您说过您不想使用mvvm,但我认为最好至少提及几乎其他所有人都做的事情。对于打算在团队中工作的其他人,那么将期望使用MVVM,因此对于其他人,请阅读:
由于页面和框架带有日志和内存开销,这通常是不希望的,所以大多数团队(我已经遇到过)使用用户控件而不是页面。这些通过contentcontrol呈现。您可以将内容设置为用户控件,但是大多数团队首先使用视图模型。重要的状态是从视图模型的实例绑定和模板化的。为了在“导航”之间保留状态,将保留对视图模型的引用-几乎可以保证它在内存上比任何类型的视图都要轻。