XAML数据绑定类似单例的MVVM对象

笔记

我是一个新手,我有时会陷入简单和/或愚蠢的想法,这就是其中之一。

我得到了数据绑定的一般想法,我已经通过网上的一些教程,并通过大量的文本谷歌搜索了几个小时,这只让我有点困惑。

问题

我正在使用Windows Phone 8 C#/ XAML .NET 4.5应用程序

使用通过几种方法提供给我的web服务,我正在加载我需要查看的数据(有时以不同的组合),我需要在应用程序运行时存储大部分数据。

  • 为此,我创建了一个ViewModel +几个模型,并按照以下方式构建它们:

    MainViewModel -------------- | + several properties (Username, Password, etc...) | + Commands (loadData1, loadData2, flush, ... - implementations of ICommand) | + ------ PersonalInfoModel | ----------------- | + several properties (name, surname, phonenumber, etc...) | | + ------ DataGroup1Model | --------------- | +several properties | +ObservableCollection (roughly 0 - 50 items) | +ObservableCollection (roughly 0 - 5 items) | +ObservableCollection (roughly 0 - 5 items) | | Item1 Item2 | ----- ----- | +several properties +several other properties | | + ------ DataGroup2Model (similar to previous) ...et cetera... 

    ViewModel不会立即填充因为它不能 ),而是在用户浏览应用程序时将数据加载到其中并指定他想要加载的数据( 这主要基于某些时间跨度和/或其他标准 )。


  • 我在App.xaml.cs中创建了MainViewModel ,如下所示:

     private static MainViewModel viewModel = null; public static MainViewModel ViewModel { get { if (viewModel == null) { viewModel = new MainViewModel(); } return viewModel; } } 

    注意:从某些人那里我听说MVVM可能/应该以不同的方式使用,我应该为每个页面创建一个ViewModel,而不是要从中绑定一个类似单例的类。 考虑之后,我决定让它像现在一样。


  • 我现在要做的是将我创建的viewModel设置为要在XAML中绑定的源/ datacontext

质询

  1. 怎么做到这一点?

  2. 如果我想将一个listBox / longListSelector的itemSource或textBox的Text设置为值,例如MainViewModel PersonalInfoModel ,我应该怎么做?

PS:正如问题开头的说明中所写,我是一名新秀。 我知道有时我们很难,但是没有一个伟大的思想家只是从伟大的虚空中产生,这就是为什么我要求更详细的解释然后只是“你应该将你的对象设置为窗口中的数据源然后设置这个”。

您要问的问题基本上是:如何连接View和ViewModel? 我完全同意这是当您开始使用MVVM时要解决的最令人困惑的问题,并且MVVM上的许多教程和post完全忽略了这个问题。

答案是:有很多方法可以将ViewModel放在您想要的位置,即View的DataContext 。 虽然你可以纯粹在XAML中做到这一点,但微软建议像这样设置DataContext ,据我所知,WP项目模板:

在代码隐藏的Views构造函数中,只需调用:

 DataContext = App.MainViewModel; 

帮助我解决这个问题的最有价值的资源之一就是这篇文章

Paul Stovell的博客

它是关于WPF而不是WP8,但它应该有所帮助。

要执行实际绑定,您现在可以按照教程进行操作,例如: