gpt4 book ai didi

c# - 绕过循环依赖

转载 作者:行者123 更新时间:2023-12-03 10:56:38 26 4
gpt4 key购买 nike

我可以就我遇到的关于将项目分成不同层的小问题寻求帮助吗?在我的 ViewModel 逻辑中,我有代码,在单击按钮时创建一个新的窗口实例(为此我使用 ICommand 接口(interface))

然而问题是,这需要我在表示层中的 View 文件夹,我无法访问它,因为我的表示层依赖于我在逻辑层中的 ViewModel。

我只是将处理页面创建的代码移动到后面的 View 代码中,但我还将 View 模型的当前实例作为正在创建的新窗口的参数传递(用于事件处理目的)。

任何帮助深表感谢!谢谢。

最佳答案

View 模型不应创建窗口实例。您可以做的是为您的 View 模型注入(inject)一个负责创建窗口的服务,例如:

public class MainWindowViewModel
{
private readonly IWindowService _windowService;

public MainWindowViewModel(IWindowService windowService)
{
_windowService = windowService;
CreateWindowCommand = new DelegateCommand(() =>
{
_windowService.CreateWindow(new SomeViewModel());
});
}

public ICommand CreateWindowCommand { get; }
}

定义 IWindowService View 模型项目中的接口(interface)及其在 View /表示项目中的具体实现:
public class WindowService : IWindowService
{
public void CreateWindow(SomeViewModel vm)
{
Window win = new Window();
win.DataContext = vm;
win.Show();
}
}

关于c# - 绕过循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54216793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com