使用mvvm在xamarin表单中的视图之间传递数据

我正在尝试在页面之间导航并同时绑定数据。

这是我尝试过的:

public ICommand GetIdeasCommand { get { return new Command(async () => { Ideas = await _apiServices.GetIdeasAsync(); await Application.Current.MainPage.Navigation.PushAsync(new IdeasSinglePage(Ideas)); }); } } 

假设Ideas是我从json获得的数组列表。 但是这个方法对我没有帮助,因为我得到一个空白页面。 此外,如果我在页面内调用此function一切都很好。 这篇文章给了我一个想法: 如何在Xamarin.Forms中将参数从一个页面传递到另一个页面?

我的看法 :

     

       

代码背后:

 public partial class IdeasSinglePage : ContentPage { public IdeasSinglePage(List ideas) { InitializeComponent(); this.BindingContext = new IdeasSinglePage(ideas); //the app breaks here } } 

谢谢。

您对BindingContext的理解缺乏。 通常将ViewModel绑定到BindingContext。 你在这做什么

this.BindingContext = new IdeasSinglePage(ideas); //the app breaks here

没有意义。

您是作为上下文传递要加载的页面? 只需完全删除此行。 因为在你最近的评论中你说你不想开始使用ViewModel,你将在CodeBehind中做的是:

 public partial class IdeasSinglePage : ContentPage { public IdeasSinglePage(List ideas) { InitializeComponent(); listViewName.ItemsSource = ideas; } } 

在你的xml中你给listView一个名字。 您需要此名称来引用后面的代码列表。

希望能帮助到你

您的问题很明显,您将数据传递给ContentPage,但您没有对它执行任何操作。 一般来说,将参数从一个ViewModel传递到另一个ViewModel是一个非常简单的问题。

这是没有XAML的插图:

 public class MyFirstPage : ContentPage { public MyFirstPage() { this.BindingContext = new MyFirstPageViewModel(); } } public class MyFirstPageViewModel : INotifyPorpertyChanged { public ICommand> DownloadDataCmd { get; } public MyFirstPageViewModel() { DownloadDataCmd = new Command>(async () => { var data = await dataService.DownloadData(); await navService.PushAsync(new MySecondPage(data)); }); } } public class MySecondPage : ContentPage { public MySecondPage(List downloadedData) { this.BindingContext = new MySecondPageViewModel(downloadedData); } } public class MySecondPageViewModel : INotifyPropertyChanged { public List Data { get; } public MySecondPageViewModel(List downloadedData) { // Do whatever is needed with the data Data = downloadedData; } } 

现在,看看这个解决方案,几乎没有问题:
1.为什么不直接在第二页下载数据?
2.如果您需要在整个应用程序中使用数据,为什么不将数据存储在缓存或数据库中?