在MVVM中切换不同的页面
本文关键字:MVVM | 更新日期: 2023-09-27 18:15:22
我正试图实现在我的Xamarin MVVM项目中通过不同页面切换的能力。我有三个文件夹-"模型","视图"answers"ViewModels"。"Views"包含"MainView",它的作用是显示其他视图。
MainView.xaml:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="KeepFit.Views.MainView">
<ContentPresenter x:Name="ContentArea" Content="{Binding CurrentView}"/>
</ContentPage>
MainView.xaml.cs:
public partial class MainView : ContentPage
{
public MainView()
{
InitializeComponent();
BindingContext = new MainViewModel();
}
}
正如你所看到的,"MainView"被绑定到"MainViewModel"类。
MainViewModel.cs:
public class MainViewModel : INotifyPropertyChanged
{
public Command SwitchViewsCommand { get; private set; }
public MainViewModel()
{
SwitchViewsCommand = new Command((parameter) =>
CurrentView = (ContentPage)Activator.CreateInstance(parameter as Type));
CurrentView = new HomeView();
}
private ContentPage _currentView;
public ContentPage CurrentView
{
get
{
return _currentView;
}
set
{
if (value != _currentView)
{
_currentView = value;
OnPropertyChanged("CurrentView");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]
string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
CurrentView在构造函数中被设置为我的HomeView(让我们说它是默认的ContentPage)。它被绑定到ContentPresenter,所以它应该在我的应用程序运行时开始时是可见的。但它不是。
我已经注意到,ContentPresenter期待Xamarin.Forms.View对象作为"内容"-我的视图继承自Xamarin.Forms.ContentPage。但是如果我将它们更改为ContentViews,例如,我将无法为它们设置BindingContext。有人能解释一下我哪里做错了吗?
你在试这个吗?
async void butonClick(object sender, EventArgs e)
{
await Navigation.PushAsync(new EntryPageCode());
}
你的视图实例在"EntryPageCode"的位置,好的。试试这个,告诉我,如果工作对你来说很好。