我是Xamarin.Forms的新手,想使用MVVM模式和XAML创建一个跨平台的应用程序。在我的表单项目(pcl)中,我想将MainPage和将来的多个页面的BindingContext设置为同一个ViewModel。这可能吗?让我展示一下我说的是什么。下面是我之前一个WPF项目的代码片段(App.xaml.cs):
public partial class App : Application
{
private MainWindow _MainWindow;
private MyViewModel _ViewModel;
public App()
{
_ViewModel = new MyViewModel();
_ViewModel.SomeEvent += new System.EventHandler(ViewModel_SomeEvent);
}
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
_MainWindow = new MainWindow();
_MainWindow.DataContext = _ViewModel;
_MainWindow.Show();
}
private void ViewModel_SomeEvent(object sender, EventArgs e)
{
//Do something
}
ViewModel的内容并不重要。通过这种结构,我可以将同一个 _ViewModel
对象设置为多个窗口的 DataContext 。在Xamarin.Forms中有相应的替代方法吗?
以下是我PCL项目中的简单代码(App.cs):
public class App
{
public static Page GetMainPage ()
{
return new MainPage();
}
}
以下是来自于MainPage.xaml.cs的代码:
public partial class MainPage : ContentPage
{
public MainPage ()
{
InitializeComponent ();
BindingContext = new MyViewModel ();
}
}
我理解这是设置页面的
BindingContext
的正确方式,但我想知道每次打开MainPage
是否会创建一个新的具有默认值的ViewModel对象。而且我不明白其他页面如何能够使用与MainPage
相同的ViewModel对象。在我看来,以上的WPF项目代码逻辑简单明了,只有一个ViewModel对象。我必须为每个页面创建不同的ViewModel类吗?对我来说这似乎是错误的。所以,是否有一种方法可以在后续添加到项目中的每个页面中使用的某个地方 - 也许是在App.cs中 - 创建一个ViewModel对象?我怀疑这一点。我希望我的表述清楚,提前感谢您!