【问题标题】:WPF MVVM Dependency Injection for UserControls用户控件的 WPF MVVM 依赖注入
【发布时间】:2021-04-23 20:26:11
【问题描述】:

我正在使用 MVVM 模式开发 WPF .Net Core 5 应用程序,并且我正在尝试使用依赖注入来学习新的东西。

我刚刚修改了 App.xaml.cs 类,如下所示,初始登录后,我可以按预期访问 MainWindow:

       public partial class App : Application
        {
            private readonly ServiceProvider _serviceProvider;
    
            public App()
            {
                ServiceCollection services = new ServiceCollection();
                ConfigureServices(services);
                _serviceProvider = services.BuildServiceProvider();
            }
    
            private void ConfigureServices(ServiceCollection services)
            {
                services.AddTransient<frmSQLConnection>();
                services.AddTransient<frmLogin>();
                services.AddSingleton<MainWindow>();
            }
    
            protected override void OnStartup(StartupEventArgs e)
            {
                if ((SuccessfullyConnected || _serviceProvider.GetService<frmSQLConnection>().ShowDialog() == true) && _serviceProvider.GetService<frmLogin>().ShowDialog() == true)
                {
                    _serviceProvider.GetService<MainWindow>().Show();
                }
                else
                {
                    Shutdown();
                }
            }
}

我现在开始怀疑了,因为 MainWindow.xaml 将由顶部的 RibbonMenu 和下方的 TabControl 组成,如下例所示: enter image description here

我的问题是什么是 UserControls 的依赖注入的良好实现? 我读过一些关于复合应用程序的文章,但它似乎对嵌套的用户控件比我的情况更有用。

有什么建议吗?

提前感谢有空

【问题讨论】:

    标签: c# wpf mvvm dependency-injection


    【解决方案1】:

    如果您符合 MVVM 模式,那么您将为每个用户控件设置 ViewModel,并在构造函数或方法主体中使用 DI 来注入您需要的“服务”。然后,您可以使用诸如 PRISM(MVVM 框架)之类的东西来触发其他 ViewModel 可以订阅的事件。它还提供了在 MVVM 应用程序中导航的机制。

    编辑: 您可能还想研究使用“外壳”视图,然后在里面使用用户控件。这将使您能够在“shell”视图中交换/导航到不同的用户控件。可以有自己的视图模型和全局事件等。

    棱镜资源:https://prismlibrary.com/docs/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多