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

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

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

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

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

上面的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{/// <summary>/// 数据集合1/// </summary>public ObservableCollection<TestDataItem> TestDataItems1 { get; private set; }/// <summary>/// 数据集合2/// </summary>public ObservableCollection<TestDataItem2> TestDataItems2 { get; private set; }/// <summary>/// 属性更改事件回调/// </summary>public event PropertyChangedEventHandler PropertyChanged;/// <summary>/// 构造函数/// </summary>public TotalTestDataCollection(){this.TestDataItems1 = new ObservableCollection<TestDataItem>();this.TestDataItems2 = new ObservableCollection<TestDataItem2>();}/// <summary>/// INotifyPropertyChanged接口的实现/// </summary>private void NotifyPropertyChanged(String propertyName){PropertyChangedEventHandler handler = PropertyChanged;if (null != handler){handler(this, new PropertyChangedEventArgs(propertyName));}}}
}

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

//TotalDataViewModel.xaml

<!-- 这对应的是数据集的类名,表示一组数据-->
<vm:TotalTestDataCollectionxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vm="clr-namespace:MvcTest.TotalDataViewModel"xmlns:c1="clr-namespace:MvTest.TestDataViewModel1"xmlns:c2="clr-namespace:MvTest.TestDataViewModel2"><!--clr-namespace:MvcTest这是数据集的命名空间,带文件夹的要注意啦--><vm:TotalTestDataCollection.TestDataItems1><c1:TestDataItem Index="0" Name="name0" Flag="True"></c1:TestDataItem><c1:TestDataItem Index="1" Name="name1" Flag="True"></c1:TestDataItem><c1:TestDataItem Index="2" Name="name2" Flag="True"></c1:TestDataItem></vm:TotalTestDataCollection.TestDataItems1><vm:TotalTestDataCollection.TestDataItems2><c2:TestDataItem2 Index="3" Name="name3" Flag="True"></c2:TestDataItem2><c2:TestDataItem2 Index="4" Name="name4" Flag="True"></c2:TestDataItem2><c2:TestDataItem2 Index="5" Name="name5" Flag="True"></c2:TestDataItem2></vm:TotalTestDataCollection.TestDataItems2>
</vm:TotalTestDataCollection>

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

//MainPage.xaml

<phone:PhoneApplicationPagex:Class="MvcTest.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"d:DataContext="{d:DesignData TotalDataViewModel/TotalDataViewModel.xaml}"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="Portrait" Orientation="Portrait"shell:SystemTray.IsVisible="True"><!--单条数据显示的样式--><phone:PhoneApplicationPage.Resources><DataTemplate x:Key="TestDataItemTemplate"><StackPanel Margin="0,0,0,0"><TextBlock Text="{Binding Index}"/><TextBlock Text="{Binding Name}" /><!--TextBlock Text="{Binding Flag}" /--><StackPanel Height="1" Background="AliceBlue"></StackPanel></StackPanel></DataTemplate><DataTemplate x:Key="TestDataItemTemplate2"><StackPanel Margin="0,0,0,0"><TextBlock Foreground="Red" Text="{Binding Index}"/><TextBlock Foreground="Yellow" Text="{Binding Name}" /><TextBlock Foreground="Green" Text="{Binding Flag}" /><StackPanel Height="1" Background="RoyalBlue"></StackPanel></StackPanel></DataTemplate></phone:PhoneApplicationPage.Resources><Grid x:Name="LayoutRoot" Background="Transparent"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"><TextBlock Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/><TextBlock Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/></StackPanel><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><!--用一个LongListSelector来显示数据集--><StackPanel><phone:LongListSelector Margin="0,0,0,0" ItemTemplate="{StaticResource ResourceKey=TestDataItemTemplate}" ItemsSource="{Binding TestDataItems1}"/><phone:LongListSelector Margin="0,0,0,0" ItemTemplate="{StaticResource ResourceKey=TestDataItemTemplate2}" ItemsSource="{Binding TestDataItems2}"/></StackPanel></Grid></Grid>
</phone:PhoneApplicationPage>

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

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

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

转载于:https://blog.51cto.com/joeyliu/1393605

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

  1. WP8开发日志(1):Toolkit的本地化

    其实此篇blog本不是这时候发表的,但由于爱恨纠缠,还是将此备忘先写下来罢,免得到时又忘记--只要自己还在弄WP的东西估计不会那么快就是啦.WP8的开发,其实跟WinRT的开发大同小异而已,满眼都是C ...

  2. 学习笔记 --- 工厂、单体、适配器、策略、观察者、MVC设计模式及ASP.NET MVC开发模式、关闭缓存的方法...

    关于工厂.单体.适配器.策略.观察者没啥好说的, 代码中有说明 //DesignPattern.cs View Code using System; using System.Collections. ...

  3. mvc设计模式现在过时了吗_尚学堂115——设计模式、源码分析以及SpringData

    设计模式 什么是设计模式?你是否在你的代码里面使用过任何设计模式? 设计模式是在软件设计中常见问题的通用.可反复使用.多数人知晓的一种解决方案或模板:这些解决方案是在相当长的一段时间内由众多软件开发人 ...

  4. jsp 将页面中的值导入java中_JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式

    JSP 的概述 概念 JSP 是 Java Server Pages 的简称,跟 Servlet 一样可以动态生成 HTML 响应, JSP 文件命名为 xxx.jsp. 与 Servlet 不同,J ...

  5. ASP.NET下MVC设计模式的实现

    1 MVC设计模式简介 MVC由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础.MVC结构是为那些需要为同样的数据提供多个视图的应用程 ...

  6. android mvc使用方法,详细学习android mvc设计模式教程

    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 web 应用程序的模式.其分层有助于管理复杂的应用程序,因为可以在一个时间内专门关注一个方面.例如 ...

  7. WPF帝友借贷系统MV模式开发日志2021/04/02_前台登入注册页面搭建

    WPF帝友借贷系统MV模式开发日志_前台页面搭建 下面是我搭建好的前台登入界面 可以看出,登入界面主要分为两个部分 一个部分是登入程序信息显示(左边) 一部分是登入数据验证部分(右边)因为是桌面软件, ...

  8. MVC设计模式+过滤器与监听器

    MVC设计模式+过滤器与监听器 一.MVC设计模式 1.概念 - 代码的分层 字母 表示 层 理解 M Modle 模型层 业务的具体实现 V View 视图层 展示数据 C Controller 控 ...

  9. Flutter开发之MVC设计模式:新建文件与导入文件(八)

    在前面的例子中,所有的代码和路由都是在main.dart 下写的.我们知道不管后台还是前端,不管是Android 还是iOS开发,都是基于MVC设计模式开发的.那么flutter是怎么使用MVC设计模 ...

最新文章

  1. IIS 500错误报service unavailable解决方案之一
  2. [Mvel]Mvel2.0使用指南一 基础
  3. mongodb转实体对像_MongoDB:实体对象(javabean)转DBObject
  4. Linux下matlab中文乱码,linux下安装的matlab无法显示中文,怎么办?求详细解答!谢谢!...
  5. 联想杨元庆:未来五年研发总投入将会超过1000亿人民币
  6. MATLAB1阶零模型,MATLAB 空间计量模型的实现
  7. linux 如何连通网络
  8. array函数参数 scala_3小时Scala入门
  9. 使用Jsoup 抓取页面的数据
  10. java实现word转pdf文件下载
  11. python下载百度文库文档
  12. 微服务究竟是“灵丹”还是“毒药”?
  13. CoLA任务的数据增强方法
  14. Win10系统上搭建GIT本地服务器
  15. 最新二开南风表情包小程序+前后端去授权版/最火表情包小程序源码
  16. Win8快速关机命令
  17. 图文详解在Windows系统中安装JDK
  18. 【mysql or条件是否走索引】
  19. Node课程(3,2,1,8,3)
  20. 第4.2章:StarRocks数据导出--Export

热门文章

  1. C# OpenFileDialog 使用
  2. hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)...
  3. 关于多维数组编码与解码的问题
  4. open_cursors参数设置调优
  5. 2月第4周回顾:IT求职困惑不少 虚拟化热点不断
  6. A MULTI-TASK FRAMEWORK WITH FEATURE PASSING MODULE FOR SKIN LESION CLASSIFICATION AND SEGMENTATION
  7. 将Rosbag中的Compressed类型的图像转换成raw类型
  8. 浅谈计算机教学论文,毕业论文--浅谈计算机教学的有效性
  9. postgresql分页用法_postgresql分页数据重复问题的深入理解
  10. python语言开发环境搭建_Python开发环境搭建-Go语言中文社区