丢失主窗口的数据上下文

我正在尝试实现一个小型应用程序,该应用程序具有登录名和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
j445566321 回答:丢失主窗口的数据上下文

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3164997.html

大家都在问