WP8开发日志(3):MVC设计模式进阶——绑定多个数据集-创新互联

接着上一篇开发日志继续探讨。

成都创新互联服务项目包括兴平网站建设、兴平网站制作、兴平网页制作以及兴平网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,兴平网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到兴平省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

上一篇日志讲到在一个PhonePage里绑定一个数据集,用的是如下的方法:

d:DataContext="{d:DesignData TestDataViewModel.xaml}"

一个xmal文件表示一个数据集,在上面代码里的d:DataContenxt里研究了半天,实在没有办法让一个DataContenxt绑定第二个xaml的数据集,玩过Linq的人都知道,一个DataContenxt下面却可以定义多个集合的,接下来的思路就是怎么在一个xmal里加入两个数据集。

自己设计了两个除了类名外其他都一样的数据类(TestDataItem.cs及TestDataItem2.cs),如下图的文件目录所示,为了显示方便将其放到两个不同的文件夹里,这时就要注意namespace的问题啦。

WP8开发日志(3):MVC设计模式进阶——绑定多个数据集

上面的TestDataCollection.cs、TestDataCollection2、TestDataViewModel.xaml、TestDataViewModel2.xaml是个人作单独显示时用的,想将两个数据集放到同一个DataContext里不需要动用这几个文件。而TotalTestDataCollection.cs是关键的所在,在此定义了一个含有两个数据集合的大集合,其代码如下所示:

//TotalTestDataCollection.cs

using MvTest.TestDataViewModel1;
using MvTest.TestDataViewModel2;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MvcTest.TotalDataViewModel
{
    public class TotalTestDataCollection : INotifyPropertyChanged
    {
        /// 
        /// 数据集合1
        /// 
        public ObservableCollection TestDataItems1 { get; private set; }
        /// 
        /// 数据集合2
        /// 
        public ObservableCollection TestDataItems2 { get; private set; }
        /// 
        /// 属性更改事件回调
        /// 
        public event PropertyChangedEventHandler PropertyChanged;
        /// 
        /// 构造函数
        /// 
        public TotalTestDataCollection()
        {
            this.TestDataItems1 = new ObservableCollection();
            this.TestDataItems2 = new ObservableCollection();
        }
        /// 
        /// INotifyPropertyChanged接口的实现
        /// 
        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (null != handler)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

如前一篇笔记强调的,要想让VS认出你的ViewModel,必须要继承INotifyPropertyChanged的接口。然后再新建一个xaml来设计两个数据集的例子(方法见上一篇博文吧),其代码如下所示:

//TotalDataViewModel.xaml



    
                                                                                                                                                                                                          
    
        
        
        
    
    
        
        
        
    

注意代码里的c1、c2的命名空间,否则会无法识别TestDataItem,当然,省事的方法就是将所有的文件放到一个目录下面,好吧,个人是有强迫症的。就这样将两个数据集拼在一个xaml里面了,下面就是在MainPage里呈现出这些数据,为此我设计了两个LongListSelector,分别显示不同的数据,为了区分起见,我设计了两个DataItemTemplate,如下面代码所示:

//MainPage.xaml


                                                                                                                        
    
    
        
            
                
                
                
                
            
        
        
            
                
                
                
                
            
        
                                                                                                                            
    
    
        
            
            
        
        
            
            
        
        
            
            
                
                
            
        
    

只要d:DataContext关联到TotalDataViewModel.xaml里,编译器倒可以自动感知内容,只要在LongListSelector里绑定好指定的数据集就可以啦,其显示效果如下图所示:

WP8开发日志(3):MVC设计模式进阶——绑定多个数据集

最后总结一下,(1)先设计好你要显示的数据类(TestDataItem.cs);(2)设计好数据集的集合类(TotalTestDataCollection.cs);(3)设计好数据集的内容(TestDataViewModel.xaml);(4)在PhonePage里呈现你的数据。步骤不多,四步而已,虽说如此,但要弄出这个效果可是花了我一个下午的时间,我真是Low爆啦。

末啦,同样附上工程例子,for vs2013。

附件:http://down.51cto.com/data/2364284

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:WP8开发日志(3):MVC设计模式进阶——绑定多个数据集-创新互联
网页链接:http://pwwzsj.com/article/dcseeo.html