Дизайн приложения
Приложение представляет собой окно, содержащее 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, которого у меня нет.
Решение @Andy означает, что я должен внедрить функцию ICommand внутри LiveCommentViewModel при ее создании внутри MainWindowViewModel, которая, конечно, будет работать (спасибо вам за это),Но разве это хороший способ сделать это?