0

Всем привет! Пытаюсь написать приложение по паттерну 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"/>
    &lt;/ResourceDictionary.MergedDictionaries&gt;

    &lt;DataTemplate DataType=&quot;{x:Type viewModel:HomeViewModel}&quot;&gt;
        &lt;view:HomeView/&gt;
    &lt;/DataTemplate&gt;

    &lt;DataTemplate DataType=&quot;{x:Type viewModel:ProfileViewModel}&quot;&gt;
        &lt;view:ProfileView/&gt;
    &lt;/DataTemplate&gt;

    &lt;DataTemplate DataType=&quot;{x:Type viewModel:ShopListViewModel}&quot;&gt;
        &lt;view:ShopListView/&gt;
    &lt;/DataTemplate&gt;

    &lt;DataTemplate DataType=&quot;{x:Type viewModel:GameTlouViewModel}&quot;&gt;
        &lt;view:GameTlouView/&gt;
    &lt;/DataTemplate&gt;
&lt;/ResourceDictionary&gt;

</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(() =&gt;
    {
        _mainViewModel.CurrentView = _mainViewModel.GameTlouVM;
    });
}

}

В MainViewModel:

ShopListVM = new ShopListViewModel(this);

На выходе получаем ошибку: System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

Очень надеюсь на помощь :)

  • https://ru.stackoverflow.com/a/1266479/373567 – aepot Feb 03 '24 at 11:28
  • Если вам пишет NullReferenceException, то логично, что один из объектов NULL. Почему он NULL - смотрите отладку. Ну а вообще, у вас в коде странности, почему например в обоих классах два раза GameTlouVM = new GameTlouViewModel();, которые не связанны друг с другом. – EvgeniyZ Feb 03 '24 at 13:00

0 Answers0