Внедрить функцию в команду модели представления через IoC - PullRequest
0 голосов
/ 01 марта 2019

Дизайн приложения

Приложение представляет собой окно, содержащее x вкладок.Каждая вкладка имеет представление, которое включает в себя другое представление, называемое «LiveComment».

Описание:

MainWindowLogic : отвечает за хранение всей логики данных.Функция AddComment (комментарий String, время DateTime, String NameOfTheTab) пишется через интерфейс (скажем, IAddComment).Эта логика доступна через контейнер IoC: IoC.Current возвращает экземпляр MainWindowLogic.

MainWindowViewModel : содержит все представления, ничего особенного

TabViewModel : содержит 'LiveCommentView' и строку NameOfTheTab

LiveCommentViewModel : содержит комментарий String, время DateTime и отправку ICommand.Команда «Отправить» используется для добавления комментария и времени в логику.

Логика

Когда пользователь находится на вкладке и нажимает кнопку отправки в LiveComment,логика должна вызываться со временем и комментарием из LiveComment и NameOfTheTab, где находится LiveComment.

Вопрос

Поскольку я хочу использовать шаблон MVVM, всемои взгляды должны быть в состоянии получить текущую логику приложения через IoC (IoC.Current).И затем в каждом 'LiveCommentViewModel' я могу получить доступ к методу AddComment из MainWindowLogic.Проблема в том, что для AddComment нужно 3 параметра, а для LiveCommentViewModel их всего 2.Последний находится в «TabViewModel» (название вкладки).

Как получить доступ к названию вкладки?Из-за MVVM «LiveCommentViewModel» не знает о «TabViewModel» (а затем и nameOfTab).

На данный момент у меня есть решение - создать конструктор с параметром:

    public LiveCommentViewModel(Action<String,DateTime> Send)
    {
        SendCommand = new RelayCommand(() => { SendMethod(Send); });
    }

Отправка Action затем инициализируется в TabViewModel (делая это, я отключаю питание IoC ...)

CommentBox = new LiveCommentViewModel((comment,TimeOfComment) => { SendCommentFunction(comment, TimeOfComment, Name); });

И затем функция 'SendCommentFunction' может быть найдена в IoC

Если не достаточно ясно, просто скажите мне.

РЕДАКТИРОВАТЬ

Я представил изображение того, что у меня есть в настоящее время.Что показывает, что мой MainWindowViewModel создает и помещает все в IoC.Когда мое представление загружено, каждый TabViewModel или LiveCommentViewModel пытается получить свой соответствующий DataContext, вызывая IoC (который, если я хорошо понимаю, MVVM)

Из-за этого у меня есть ограничение.Когда пользователь посылает команду отправки, я хочу использовать «AddComment» из MainWindowViewModel, но для этого требуется NameOfTheTab, которого у меня нет.enter image description here

Решение @Andy означает, что я должен внедрить функцию ICommand внутри LiveCommentViewModel при ее создании внутри MainWindowViewModel, которая, конечно, будет работать (спасибо вам за это),Но разве это хороший способ сделать это?

...