В MainViewModel есть параметр _buttonsEnabled, привязанный во view ко всем нужным кнопкам. Также есть второе окно LoginPanel, в котором происходит регистрация пользователя. Пользователя всего 2:
- Админ, которому доступны все кнопки
- user, которому некоторые кнопки недоступны
Окно LoginPanel вызываю из MainViewModel по кнопке:
[RelayCommand]
public void LoginUser()
{
var loginPanel = new LoginPanel();
loginPanel.Show();
}
У LoginPanel есть своя LogicPanelViewModel, в которой идет логика проверки логина и пороля из БД. И в зависимости от пользователя я хочу переключать _buttonsEnabled в MainViewModel.
Проблема: Как получить доступ к _buttonsEnabled из другой ViewModel? Видел решение, в котором нужно передать в конструктор класс основного окна, но это решение скорее всего реализовано без использования MVVM.
Видел решение, в котором нужно передать в конструктор класс- передавать окна, нельзя, это нарушение MVVM, ибо ViewModel знает про View слой, чего быть не должно. В вашем вопросе сейчас также есть это нарушение, ибоLoginPanel- это "окно", то есть View, ну а команда относится к ViewModel. Отвечая на ваш вопрос (передать VM в другую VM) - через конструктор, связывать VM слои можно, и даже порой нужно, то естьvar vm = new SomeViewModel(this);, гдеthisэтоMainViewModel. Но тут стоит подумать о вынесении логики за пределы VM. – EvgeniyZ Jul 24 '23 at 10:19buttonsEnabled- кнопка? Её состоянием, как правило, управляет тоже VM, а если быть точнее - команда, к которой она привязана. Как выше сказал @EvgeniyZ - выносите логику из VM в сервис/класс/etc., передавайте в VM не VM или V, а сервис, при этом он должен быть Singleton – OwDafuq Jul 24 '23 at 11:18