相关疑难解决方法(0)

在MVVM中为View提供一些命令

我们假设我有一些用户控制权.用户控件有一些子窗口.并且用户控制用户想要关闭某种类型的子窗口.用户控制代码中有一种方法:

public void CloseChildWindows(ChildWindowType type)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但我无法调用此方法,因为我无法直接访问该视图.

我想到的另一个解决方案是以某种方式将用户控件ViewModel作为其属性之一公开(因此我可以绑定它并直接向ViewModel发出命令).但我不希望用户控制用户知道有关用户控件ViewModel的任何信息.

那么解决这个问题的正确方法是什么?

.net c# wpf mvvm

16
推荐指数
4
解决办法
6696
查看次数

在Structure Map中解析窗口或如何在WPF MVVM中管理多个窗口?

我一直在阅读Mark Seeman关于.NET中依赖注入的书,我很难在WPF应用程序中配置组合根.

我的容器将在应用程序启动方法中注册:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var container = new Container();
    container.Configure(r =>
                        {
                            r.For<IAccountServices>().Use<AccountServicesProxy>();
                            r.For<MainWindow>().Use<MainWindow>();
                        });
}
Run Code Online (Sandbox Code Playgroud)

这有意义,因为应用程序启动代表我的组合根.

我的应用程序中的WPF窗口基于视图模型.视图模型使用构造函数注入.例如,我可以通过注入实现来构成视图模型IAccountServices.

在创建主窗口时,我可以在OnStartup方法中执行以下操作:

var mainWindow = container.GetInstance<MainWindow>();
mainWindow.Show();
Run Code Online (Sandbox Code Playgroud)

一旦我进入主窗口,我可能想要打开另一个窗口.到目前为止,我已经能够提出一种方法,即创建一个窗口工厂并请求窗口工厂解析窗口的实例.我必须确保窗口​​工厂在每个可能需要打开新窗口的视图模型中都可用.在我看来,这与在我的应用程序中传递IoC容器一样糟糕(服务定位器反模式会浮现在脑海中).

这种方法对你来说是否正确?我的直觉告诉我这是错的,但我还没有想出一个更好的方法来实现这个目标.

wpf dependency-injection window inversion-of-control mvvm

12
推荐指数
2
解决办法
1843
查看次数