Создаю приложение, и не могу понять вроде делал по инструкции с гайда в интернете, но переключение страниц не работает, при нажатии кнопки, подскажите пожалуйста: Сама функция переключения:
using GalaSoft.MvvmLight.Command;
using PCheck.View;
using System.Windows.Controls;
using System.Windows.Input;
namespace PCheck
{
internal class ViewMainModal : ViewModelChangings
{
private Page _startPage = new StartPage();
private Page _diagnosticPage = new DiagnosticPage();
private Page _mainPage = new MainPage();
public Page _CurPage
{
get => null;
set => Set(ref _startPage, value);
}
public ICommand OpenStartPage
{
get
{
return new RelayCommand(() => _CurPage = _startPage);
}
}
public ICommand OpenDiagnosticPage
{
get
{
return new RelayCommand(() => _CurPage = _diagnosticPage);
}
}
public ICommand OpenMainPage
{
get
{
return new RelayCommand(() => _CurPage = _mainPage);
}
}
}
}
И так же Xaml где находится следующие основные элементы, это кнопка по которой идёт переключение,frame в котором будет появляться окно и объявление где хранится и какая функция используется
<Window.DataContext>
<local:ViewMainModal d:IsDataSource="True"/>
</Window.DataContext>
xmlns:dc="clr-namespace:PCheck.View"
xmlns:local="clr-namespace:PCheck"
<Button HorizontalAlignment="Left" Command="{Binding OpenStartPage}" BorderThickness="0" Margin="774,457,0,0" VerticalAlignment="Top" BorderBrush="Transparent" Height="52" Width="208" FontFamily="Rostelecom Basis" FontWeight="Bold" FontSize="17" Background="#FFFD4E1F" Foreground="{x:Null}" Cursor="Hand" Click="Button_Click_4">
<Frame x:Name="MainFraime" NavigationUIVisibility="Hidden" Content="{Binding _CurPage}" Navigated="MainFraime_Navigated"/>
new RelayCommand(() => _CurPage = new MainPage());Но это не решение, если вы собираетесь или используете MVVM, так как оно нарушает MVVM. Решение в предыдущем комментарии, по ссылке. – aepot Mar 21 '24 at 13:29Pageявляется View слоем. Другими словами, у вас у каждой страницы должна быть своя VM, которая не должна находиться в XAML, а создаваться также, отдельно, и вот уже она должна храниться. Если бы у вас использовались DI контейнеры (советую кстати), то ваша задача решилась бы просто - зарегистрировать VM как синглтон, который раз создается и больше не удаляется. Ну а так, как я вам уже ссылками выше намекнул, убирайте из XAMLDataContextи храните их отдельно. – EvgeniyZ Mar 21 '24 at 16:43get => nullникто не заметил. :) – aepot Mar 26 '24 at 17:02