2

笔记

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

我对数据绑定有了大致的了解,我已经阅读了网上的一些教程,并在谷歌上搜索了几个小时,通过大量的文本,这只让我有点困惑。

问题

我正在使用Windows Phone 8 C#/XAML .NET 4.5 Application

使用通过几种方法提供给我的 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<Item1> (roughly 0 - 50 items)
    |        +ObservableCollection<Item2> (roughly 0 - 5 items)
    |        +ObservableCollection<string> (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 中绑定

问题

  1. 如何做到这一点?

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

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

4

1 回答 1

4

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

答案是:有很多方法可以让 ViewModel 到达您想要的位置,即在 View 的DataContext. 尽管您可以完全在 XAML 中执行此操作,但 Microsoft 建议设置DataContext这样的,据我所知 WP 项目模板:

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

DataContext = App.MainViewModel;

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

保罗斯托维尔的博客

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

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

<TextBlock Text="{Binding PersonalInfoModel.Name}" />
于 2013-10-16T08:03:40.577 回答