在将项目分成不同的层时遇到的一个小问题能否获得帮助。在我的ViewModel逻辑中,我有代码,在其中单击按钮时将创建窗口的新实例(为此,我使用ICommand接口)
但是问题是,这需要我位于表示层中的View文件夹,由于该表示层依赖于逻辑层中的ViewModel,因此无法访问它。
我只是将处理页面创建的代码移到了后面的视图代码中,但是我还将viewmodel的当前实例作为要创建的新窗口的参数(出于事件处理的目的)传递。
非常感谢您的帮助!谢谢。
答案 0 :(得分:3)
视图模型不应创建Windows实例。您可以做的是向视图模型注入负责创建窗口的服务,例如:
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
接口,并在视图/表示项目中定义它的具体实现:
public class WindowService : IWindowService
{
public void CreateWindow(SomeViewModel vm)
{
Window win = new Window();
win.DataContext = vm;
win.Show();
}
}