Не изменяется MainWindow из View
Хочу реализовать программу с одним главным изменяющимся окном.
Для этого необходимо изменять UserControl-леры по нажатию не только из самого главного окна, но и из самих UserControl-леров.
То есть по нажатию кнопки из UserControl_1 нужно менять отображаемый в главном окне UserControl_1 на UserControl_2.
Для этого я передаю MainViewModel в другие ViewModel.
Код Главного окна
class MainViewModel : ObservableObject
{
public RelayCommand HomeViewCommand { get; set; }
public RelayCommand TestingViewCommand { get; set; }
public HomeViewModel HomeVM { get; set; }
public TestingViewModel TestingVM { get; set; }
private object _currentView;
public object CurrentView
{
get { return _currentView; }
set
{
_currentView = value;
OnPropertyChanged();
}
}
public MainViewModel()
{
HomeVM = new HomeViewModel(this);
TestingVM = new TestingViewModel(this);
CurrentView = HomeVM;
//Команды для кнопок
HomeViewCommand = new RelayCommand(o => { CurrentView = HomeVM; });
TestingViewCommand = new RelayCommand(o => { CurrentView = TestingVM; });
}
}
Код первого UserController-a
class HomeViewModel : ObservableObject
{
public RelayCommand TestingViewCommand { get; set; }
public HomeViewModel(MainViewModel obj)
{
//Команды для кнопок
TestingViewCommand = obj.TestingViewCommand;
}
}
Код RelayCommand
internal class RelayCommand : ICommand
{
private Action<object> _execute;
private Func<object, bool> _canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parametr)
{
return _canExecute == null || _canExecute(parametr);
}
public void Execute(object parametr)
{
_execute(parametr);
}
}
HomeView у меня находиться сразу на главной странице. В нем есть кнопки которые должны изменять HomeView на TestingView.
Но при нажатии главное окно никак не изменяется. Как это исправить?