Обойти круговую зависимость - PullRequest
0 голосов
/ 16 января 2019

Могу ли я получить помощь по небольшой проблеме, с которой я сталкиваюсь при разделении проектов на разные уровни? В моей логике ViewModel у меня есть код, где я создаю новый экземпляр окна при нажатии кнопки (для этого я использую интерфейс ICommand)

Проблема, однако, в том, что для этого требуется папка View, которая находится на уровне представления, я не могу добраться до нее, поскольку уровень представления зависит от моей ViewModel на уровне логики.

Я бы просто переместил код, связанный с созданием страниц, в код представления, но я также передаю текущий экземпляр модели представления в качестве параметра для создаваемого нового окна (для целей обработки событий).

Любая помощь очень ценится! Спасибо.

1 Ответ

0 голосов
/ 16 января 2019

Модель представления не должна создавать экземпляры окон. Что вы можете сделать, это внедрить вашу модель представления в службу, отвечающую за создание окон, например ::10000

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...