Всем привет! Пытаюсь написать приложение по паттерну MVVM, у меня возникла проблема. У меня есть мой основной MainWindow в котором я устанавливаю ContentControl. В классе MainViewModel я делаю привязки для менюшки:
public RelayCommand HomeViewCommand { get; set; }
public HomeViewModel HomeVM { get; set; }
public RelayCommand ProfileViewCommand { get; set; }
public ProfileViewModel ProfileVM { get; set; }
public RelayCommand ShopListViewCommand { get; set; }
public ShopListViewModel ShopListVM { get; set; }
public GameTlouViewModel GameTlouVM { get; set; }
public object _currentView;
public object CurrentView
{
get { return _currentView; }
set
{
_currentView = value;
OnPropertyChanged();
}
}
public MainViewModel()
{
HomeVM = new HomeViewModel();
ProfileVM = new ProfileViewModel();
ShopListVM = new ShopListViewModel();
GameTlouVM = new GameTlouViewModel();
CurrentView = HomeVM;
HomeViewCommand = new RelayCommand(() =>
{
CurrentView = HomeVM;
});
ProfileViewCommand = new RelayCommand(() =>
{
CurrentView = ProfileVM;
});
ShopListViewCommand = new RelayCommand(() =>
{
CurrentView = ShopListVM;
});
}
Вот мой App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/LightTheme.xaml"/>
<ResourceDictionary Source="Themes/DarkTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
<DataTemplate DataType="{x:Type viewModel:HomeViewModel}">
<view:HomeView/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:ProfileViewModel}">
<view:ProfileView/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:ShopListViewModel}">
<view:ShopListView/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:GameTlouViewModel}">
<view:GameTlouView/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
Когда пользователь нажимает на кнопку ShopListViewCommand, у меня открывается нужный мне UserControl. Там есть кнопка, нажав на которую у пользователя вновь должна смениться UserControl в MainWindow. Как мне это реализовать? Очень много вариантов перепробовал ничего не выходит.
Вот один из вариантов, которые я пытался использовать:
public class ShopListViewModel : ObservableObject
{
private readonly MainViewModel _mainViewModel;
public RelayCommand GameTlouViewCommand { get; set; }
public GameTlouViewModel GameTlouVM { get; set; }
public ShopListViewModel(MainViewModel mainViewModel)
{
_mainViewModel = mainViewModel;
GameTlouVM = new GameTlouViewModel();
GameTlouViewCommand = new RelayCommand(() =>
{
_mainViewModel.CurrentView = _mainViewModel.GameTlouVM;
});
}
}
В MainViewModel:
ShopListVM = new ShopListViewModel(this);
На выходе получаем ошибку: System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Очень надеюсь на помощь :)
NullReferenceException, то логично, что один из объектов NULL. Почему он NULL - смотрите отладку. Ну а вообще, у вас в коде странности, почему например в обоих классах два разаGameTlouVM = new GameTlouViewModel();, которые не связанны друг с другом. – EvgeniyZ Feb 03 '24 at 13:00