我可以就我遇到的关于将项目分成不同层的小问题寻求帮助吗?在我的 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/