Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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
C# 如何存储加载的视图,以便我们不';当我们到达相同的视图时,不需要再次初始化组件_C#_.net_Wpf_Mvvm - Fatal编程技术网

C# 如何存储加载的视图,以便我们不';当我们到达相同的视图时,不需要再次初始化组件

C# 如何存储加载的视图,以便我们不';当我们到达相同的视图时,不需要再次初始化组件,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,实际上我有两个按钮。当我单击第一个按钮时,一个UserControl将在ContentControl中可见,当我单击第二个按钮时,另一个UserControl将出现并位于ContentControl中。问题是,每次单击按钮时,它都会加载特定的UserControl->InitializeComponent()方法。我希望在开始时只加载一次视图,而不是每次从一个UserControl切换到另一个UserControl时。 非常感谢 您有几种选择 字典就是其中之一 Dictionary<Ty

实际上我有两个按钮。当我单击第一个按钮时,一个UserControl将在ContentControl中可见,当我单击第二个按钮时,另一个UserControl将出现并位于ContentControl中。问题是,每次单击按钮时,它都会加载特定的UserControl->InitializeComponent()方法。我希望在开始时只加载一次视图,而不是每次从一个UserControl切换到另一个UserControl时。
非常感谢

您有几种选择

字典就是其中之一

 Dictionary<Type, UserControl> MyControls
使用你已经拥有的或新的实例,如果没有。当然,还可以添加到字典中

该词典可以保存在依赖项注入容器中,也可以是静态的,这样您就可以从任何地方引用它。或者,您关心的所有用户控件都在一个地方实例化

您也可以使用依赖项注入,使所有的usercontrols成为单例

确切的语法取决于您使用的DI容器(microsoft容器除外):

  services.AddSingleton<YourUserControl>();
services.AddSingleton();
如果这是一个特别有问题的问题(原因我无法想象),那么您也许可以使用惰性实例化模式使您的usercontrols有效地静态化

或者这实际上是一段代码中的两个用户控件,您可以简单地缓存两个私有变量

注:

我想知道你在做什么初始化

一种常见的模式是viewmodel first,其中viewmodel实例将呈现给视图并模板化到UI中。在这种情况下,初始化逻辑将位于该视图模型中。这种方法可能只是改变了缓存在字典或依赖项注入容器中的内容的类型

  services.AddSingleton<YourUserControl>();