0

Есть 2 юзер контрола: Логин панель и панель регистрации. У них есть свои ViewModel'и. Есть еще AuthViewModel и BaseViewModel, код:

BaseViewModel

public class BaseViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName] string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
        public static LoginViewModel L_GUI = new LoginViewModel();
        public static RegistrationViewModel R_GUI = new RegistrationViewModel();
    private BaseViewModel _selectedViewModel;
    public BaseViewModel SelectedViewModel
    {
        get { return _selectedViewModel; }
        set
        {
            _selectedViewModel = value;
            OnPropertyChanged("SelectedViewModel");
        }
    }
}

AuthViewModel

public class AuthViewModel : BaseViewModel
    {
        public AuthViewModel()
        {
            SelectedViewModel = L_GUI;
        }
    private RelayCommand addCommand;
    public RelayCommand Registration
    {
        get
        {
            return addCommand ??
                (addCommand = new RelayCommand(obj =>
                {
                    SelectedViewModel = R_GUI;
                }));
        }
    }


    private RelayCommand logincommand;
    public RelayCommand LogIn
    {
        get
        {
            return logincommand ??
                (logincommand = new RelayCommand(obj =>
                {
                    SelectedViewModel = L_GUI;
                }));
        }
    }
}

LoginViewModel

public class LoginViewModel : BaseViewModel
    {
        private RelayCommand logincommand;
        public RelayCommand Registration
        {
            get
            {
                return logincommand ??
                    (logincommand = new RelayCommand(obj =>
                    {
                        SelectedViewModel = R_GUI;
                    }));
            }
        }
    }

RegistrationViewModel

 public class RegistrationViewModel : BaseViewModel
    {
        private RelayCommand logincommand;
        public RelayCommand LogIn
        {
            get
            {
                return logincommand ??
                    (logincommand = new RelayCommand(obj =>
                    {
                        SelectedViewModel = R_GUI;
                    }));
            }
        }
    }

Свойство SelectedViewModel определено в BaseViewModel, он отвечает за выбранный ViewModel. При смене ViewModel, сменяется и View. Так вот, при изменении свйоства SelectedViewModel из класса LoginViewModel и RegistrationViewModel само свойство вроде как меняется, но View не меняется. Я может не очень объяснил, могу скинуть проект.

VeNNoM
  • 115
  • Свойство SelectedViewModel определено в BaseViewModel, да, только реализовано оно в других классах. У вас нету некого одного класса, который отвечал бы за SelectedViewModel, у вас есть несколько классов, которые реализуют это свойство. Сделайте отдельный класс, который будет являться главным, в нем определите все необходимые свойства, а в классы, где требуется изменение свойства, передавайте ссылку через конструктор на главную VM. – EvgeniyZ Jul 22 '20 at 09:14
  • Не могли бы вы оформить как ответ, пожалуйста. Может, если будет пример мне проще будет понять. – VeNNoM Jul 22 '20 at 09:45
  • Я уже давал ответ с подробным решением вашей задачи, вы же его проигнорировали и пошли своим путем, что вы от меня ожидаете, переписывание того ответа? Да и если перепишу, то вы же не поймете небось опять. Да и зачем мне тратить на это время? Ну и не понятно что вы не понимаете, в чем трудности сделать в главной VM свойство SelectedViewModel (или вынести его отдельно в класс), в нужных классах принимать его главную VM через конструктор (private ГлавVM VM; public LoginViewModel(главVM vm) {VM=vm;}) и при инициализации LoginViewModel(this) – EvgeniyZ Jul 22 '20 at 09:57
  • 1
    Спасибо, я понял! – VeNNoM Jul 22 '20 at 10:23

0 Answers0