Я пытаюсь создать небольшое приложение, которое имеет логин и 3 страницы в качестве вкладок. Мне нужно скрыть часть главного окна перед входом в систему и показать после успешного входа.
Я загружаю дочерние представления в главном окне, используя шаблон данных.
MainWindow.xaml
x:Class="Test.MainWindow"
xmlns:local="clr-namespace:Test"
xmlns:log="clr-namespace:Test.Login"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:pat="clr-namespace:Test.Participents"
xmlns:reg="clr-namespace:Test.Register">
<Window.Resources>
<DataTemplate DataType="{x:Type log:LoginViewModel}">
<log:LoginView />
</DataTemplate>
<DataTemplate DataType="{x:Type reg:RegistrationViewModel}">
<reg:RegistrationView />
</DataTemplate>
<DataTemplate DataType="{x:Type fac:FacultyViewModel}">
<fac:FacultyView />
</DataTemplate>
<DataTemplate DataType="{x:Type bat:BatchViewModel}">
<bat:BatchView />
</DataTemplate>
<DataTemplate DataType="{x:Type pat:ParticipentViewModel}">
<pat:ParticipentView />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid x:Name="NavBar" Visibility="{Binding IsLogin}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
Command="{Binding NavCommand}"
CommandParameter="faculty"
Content="Faculty" />
<Button
Grid.Column="1"
Command="{Binding NavCommand}"
CommandParameter="batch"
Content="Batch" />
<Button
Grid.Column="2"
Command="{Binding NavCommand}"
CommandParameter="participant"
Content="Participant" />
</Grid>
<Grid x:Name="MainContent" Row="1">
<ContentControl Content="{Binding CurrentViewmodel}" />
</Grid>
</Grid>
</Window>```
MainWindowViewModel.cs
открытый класс MainWindowViewModel: BindableBase {
private LoginViewModel _loginViewModel;
private BatchViewModel _batchViewModel;
private ParticipentViewModel _participentViewModel;
private FacultyViewModel _facultyViewModel;
public RelayCommand<string> NavCommand { get; private set; }
private BindableBase _CurrentViewmodel;
public BindableBase CurrentViewmodel
{
get { return _CurrentViewmodel; }
set { SetProperty(ref _CurrentViewmodel,value); }
}
public MainWindowViewModel()
{
_loginViewModel = ContainerHelper.Container.Resolve<LoginViewModel>();
_loginViewModel.NavToRegisterRequested += NavToRegister;
_loginViewModel.NavToHomeRequested += NavToHome;
_facultyViewModel = ContainerHelper.Container.Resolve<FacultyViewModel>();
_batchViewModel = ContainerHelper.Container.Resolve<BatchViewModel>();
_addbatchViewModel =
_participentViewModel = ContainerHelper.Container.Resolve<ParticipentViewModel>();
NavCommand = new RelayCommand<string>(OnNav);
_CurrentViewmodel = _loginViewModel;
IsLogin = Visibility.Collapsed;
}
private Visibility _isLogin;
public Visibility IsLogin
{
get { return _isLogin; }
set { SetProperty(ref _isLogin, value); }
}
private void OnNav(string destination) {
switch (destination)
{
case "faculty":
CurrentViewmodel = _facultyViewModel;
break;
case "batch":
CurrentViewmodel = _batchViewModel;
break;
case "participant":
CurrentViewmodel = _participentViewModel;
break;
default:
CurrentViewmodel = _facultyViewModel;
break;
}
}
private void NavToLogin()
{
CurrentViewmodel = _loginViewModel;
}
---> private void NavToHome()
{
_isLogin = Visibility.Visible;
//CurrentViewmodel = new MainWindowViewModel();
} ---> here is the doubt
private void NavToFacultyHome()
{
CurrentViewmodel = _facultyViewModel;
}
private void NavToBatchHome()
{
CurrentViewmodel = _batchViewModel;
}
private void NavToParticepentHome()
{
CurrentViewmodel = _participentViewModel;
}
}
LoginViewModel.cs
public class LoginViewModel:BindableBase
{
public RelayCommand NavToRegisterCommand { get; private set; }
public RelayCommand LoginCommand { get; private set; }
public LoginViewModel()
{
NavToRegisterCommand = new RelayCommand(OnNavToRegister);
LoginCommand = new RelayCommand(OnLogin);
}
public event Action NavToRegisterRequested = delegate { };
public event Action NavToHomeRequested = delegate { };
private void OnNavToRegister()
{
NavToRegisterRequested();
}
private void OnLogin()
{
NavToHomeRequested();
}
}
After successful login i want show navbar grid in the main window