首页 > 解决方案 > 通过按钮单击更改页面

问题描述

在我的 xaml 文件中,我有

 <Button 
    Command="{Binding LoginCommand}"
 </Button>

<Frame
    Grid.Column="1"
    NavigationUIVisibility="Hidden"
     Content="{Binding CurrentPage, UpdateSourceTrigger=PropertyChanged}">
</Frame>

我的视图模型类:

        private readonly LoginPageView _loginPage;  // Page i want to use
        private readonly StartPageView _startPage;
        private Page _currentPage;

        public StartWindowViewModel(LoginPageView loginPage, StartPageView startPage)
        {
            _loginPage = loginPage;
            _startPage = startPage;
            CurrentPage = _startPage;
            LoginCommand = new RelayCommand(OpenLoginPage, _ => true);
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public Page CurrentPage                                  // I'm binding my frame to this property
        {
            get => _currentPage;
            set
            {
                _currentPage = value;
                OnPropertyChanged();
            }
        }

        public RelayCommand LoginCommand { get; set; }

        private void OpenLoginPage(object parameter)
        {
            CurrentPage = _loginPage;
        }

        protected void OnPropertyChanged([CallerMemberName] string name = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }

我想通过单击按钮更改框架中显示的页面。我不确定我是否应该为此使用 Frame,但这似乎还可以。我没有更新页面的问题,

标签: c#wpfmvvmbinding

解决方案


我的解决方案似乎不是最好的:

<Frame
    Grid.Column="1"
    NavigationUIVisibility="Hidden"
    Source="{Binding PageName}">
</Frame>

public string PageName
{
    get => _pageName + ".xaml";
    set
    {
        _pageName = value;
        OnPropertyChanged();
    }
}

我实际上并不喜欢这种解决方法,所以如果有人能提供更好的方法,我会很高兴。


推荐阅读