功能描述:一级菜单省份  联动显示省份下的城市

直接上代码

public class City
{
public string Num { get; set; }
public string Name { get; set; } }
public class Province
{
public string ProvinceName { get; set; }
public ObservableCollection<City> Citys { get; set; }
}
public class ProvinceList : ObservableCollection<Province>
{
public ProvinceList()
{
ObservableCollection<City> province1 = new ObservableCollection<City>();
province1.Add(new City { Num = "", Name = "郑州" });
province1.Add(new City { Num = "", Name = "南阳" });
province1.Add(new City { Num = "", Name = "新乡" }); ObservableCollection<City> province2 = new ObservableCollection<City>(); province2.Add(new City { Num = "", Name = "石家庄" });
province2.Add(new City { Num = "", Name = "保定" });
province2.Add(new City { Num = "", Name = "衡水" });
province2.Add(new City { Num = "", Name = "邢台" }); ObservableCollection<City> province3 = new ObservableCollection<City>()
{
new City(){Num="",Name="长沙"},
new City(){Num="",Name="株洲"}
}; this.Add(new Province() { ProvinceName = "河南省", Citys = province1 });
this.Add(new Province() { ProvinceName = "河北省", Citys = province2 });
this.Add(new Province() { ProvinceName = "湖南省", Citys = province3 }); }
protected override void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
}
protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
base.OnCollectionChanged(e);
}
}

这是数据源的代码
主要是省份列表类  继承 ObservableCollection泛型类  这个类有两个两种通知:

public virtual event NotifyCollectionChangedEventHandler CollectionChanged;  当集合中的某个项更改或者整个集合更改时发生
protected virtual event PropertyChangedEventHandler PropertyChanged;  当集合中单个项的属性更改时发生

意思就是当数据源集合改变时或者集合里面的某个属性改变时  进行通知前台显示

前台代码:

<phone:PhoneApplicationPage.Resources>
<local:ProvinceList x:Key="prolist"/>
<CollectionViewSource x:Key="ProCityList"
Source="{StaticResource prolist}"/>
<DataTemplate x:Key="cityList">
<StackPanel Height=""
Orientation="Horizontal"> <TextBlock Height=""
Width=""
Text="{Binding Num}"/>
<TextBlock Height=""
Width=""
Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>

初始化省份列表的数据源,定义显示城市的列表的每一项的数据模板

注意CollectionViewSource  之所以能分层绑定  多绑定一级  就是因为CollectionViewSource
MSDN对CollectionViewSource的解释

CollectionViewSource 允许使用 XAML 代码设置将这些设置传递到基础视图的常用 CollectionView 属性。 CollectionViewSource 具有一个保存实际视图的 View 属性和一个保存源集合的 Source 属性。

可以将集合视图视为位于绑定源集合之上的一个层,您可以通过它使用排序、筛选和分组查询来导航和显示集合,所有这些操作都无需操作基础源集合本身。 如果源集合实现了INotifyCollectionChanged 接口,则 CollectionChanged 事件引发的更改将传播到视图。

由于视图不会更改基础源集合,因此每个源集合可以有多个关联的视图。 例如,您可以有一个 Task 对象的集合。 通过使用视图,可以通过多种不同的方式来显示相同数据。 例如,您可能希望在页面左侧显示按优先级排序的任务,而在页面右侧显示按区域分组的任务。

具体显示的代码:

<Grid x:Name="ContentPanel" DataContext="{Binding Source={StaticResource ProCityList}}" Grid.Row="" Margin="12,0,12,0">
<TextBlock Width=""
Height=""
FontSize=""
Text="请选择省份:"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10,30,0,0"/>
<ListBox Name="lb1"
Height=""
Width=""
DisplayMemberPath="ProvinceName"
ItemsSource="{Binding}"
Margin="40,69,260,0"
HorizontalAlignment="Center"
VerticalAlignment="Top" FontSize="" />
<TextBlock Height=""
Width=""
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding Path=ProvinceName}"
Foreground="Aqua" Margin="12,210,0,0" FontSize="" /> <TextBlock Height=""
HorizontalAlignment="Right"
Text="城市列表"
VerticalAlignment="Top" Margin="0,210,169,0" Width="" FontSize="" /> <TextBlock Height=""
Width=""
Text="区号" Margin="6,278,330,279" FontSize="" />
<TextBlock Height=""
Width=""
Text="城市名" Margin="0,278,260,279" HorizontalAlignment="Right" FontSize="" /> <ListBox Name="lb2"
Height=""
VerticalAlignment="Top"
ItemsSource="{Binding Path=Citys}"
ItemTemplate="{StaticResource cityList}" FontSize="" Margin="0,328,0,0" />
<TextBlock Name="tb4" Foreground="White" Text="{Binding Path=Citys.Count}" Width="" Margin="129,563,127,10"/>
</Grid>

在这段代码中如果把Grid的DataContent直接写成ObservableCollection泛型集合对象   下面的城市列表绑定就不会显示

经过尝试   在wpf中可以这样写<Button Content="{Binding /City/lCity}" />  可以指定下一级的数据绑定  可以一直往下一级绑定  但是windowsphone没有这种写法 所以windowsphone只能绑定到一级

windowsphone 中CollectionViewSource和ObservableCollection的使用的更多相关文章

  1. windowsphone中获取手机位置信息

    首先在界面中加入一个textblock控件以显示信息 using System; using System.Collections.Generic; using System.IO; using Sy ...

  2. 在WindowsPhone开发中使用MVVM设计模式

    相信.NET程序员多多少少都听说过MVVM的设计模式,对于一个大一点的项目来说,使用这种设计模式无疑是一种不错的选择, 它提高了程序的可维护性,降低了耦合度,可以实现代码的重用,方便独立开发和进行测试 ...

  3. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  4. 【IOS】模仿windowsphone列表索引控件YFMetroListBox

    有没有觉得UITableView自带的右侧索引很难用,我一直觉得WindowsPhone中的列表索引非常好用. 所以呢,我们来实现类似Windows Phone中的列表索引(这就是信仰). 最终实现效 ...

  5. WPF 只读集合在 XAML 中的绑定(WPF:Binding for readonly collection in xaml)

    问题背景 某一天,我想做一个签到打卡的日历.基于 Calendar,想实现这个目标,于是找到了它的 SelectedDates 属性,用于标记签到过的日期. 问题来了. 基于MVVM模式,想将其在xa ...

  6. WP8.1学习系列(第二十三章)——到控件的数据绑定

    在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...

  7. WPF的IsSynchronizedWithCurrentItem属性

    如果两个控件都绑定到同一个源(ObservableCollection)集合视图时,该对象会自动绑定到该视图的 CurrentItem.请注意,CollectionViewSource 对象会自动同步 ...

  8. 使用 Windows Phone Toolkit 的 Tilt 效果

    上一篇文章分享了如何使控件具有摁下的效果(在WindowsPhone中使控件具有Tilt效果),实现方式是在项目中添加新的类文件,其实,如果项目引用了Windows Phone Toolkit,那么就 ...

  9. 【IOS】将字体大小不同的文字底部对齐

    从WP转IOS了,还是放不下...... 在项目中,要实现如图多个不同大小的文字   底部对齐的效果   像下面这样: (想要的效果) 以为用三个UIFont不同的UILabel  之后让他们底部对齐 ...

随机推荐

  1. 用Objective-C的Category特性添加类的属性

    http://www.cnblogs.com/wupher/archive/2013/01/05/2845338.html Category是Objective-C中常用的语法特性,通过它可以很方便的 ...

  2. TCP连接建立的三次握手过程可以携带数据吗?

    前几天实验室的群里扔出了这样一个问题:TCP连接建立的三次握手过程可以携带数据吗?突然发现自己还真不清楚这个问题,平日里用tcpdump或者Wireshark抓包时,从来没留意过第三次握手的ACK包有 ...

  3. Java宝典

    本人最近参加了几家公司的面试,在其中发现了不少笔试题,虽然是平常再简单不过的,但一不小心还是会出错.今天特意找时间写下来和大家分享. 1.访问控制符权限问题.   同一个包中 同一个类中 不同包的子类 ...

  4. llvm學習(二)————llvm編譯與環境構建

    本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17339027) 在2011十月份的时候, ...

  5. DevExpress LookUpEdit 下拉框基本操作

    <span style="font-size:14px;"> ArrayList list = new ArrayList(); //遍历皮肤,放到列表中 foreac ...

  6. Javascript UserAgent 获取平台及浏览器信息

    公司最近要做一套类似于百度统计的功能,于是收集整理了其中根据UserAgent获取客户端平台及浏览器信息的资料,不仅仅试用于Javascript,其他语言也可以参考相应正则进行改进.当然,肯定有不足的 ...

  7. python 分支 循环

    一  python 知识点      1.变量(标签):           a(变量名) = '字符串'or 数字 (整形和浮点型)     a相当于变量名的标签           如: a = ...

  8. Eclipse如何生成带有自定tag的Java Doc

    1. 选择要生成Java Doc的工程,单击鼠标右键,在弹出菜单中选择[Export],会弹出以下对话框: 2. 选择[Java]--->[Javadoc],点击[Next]按钮,弹出以下对话框 ...

  9. 谈一下怎样设计Oracle 分区表

    在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...

  10. Oracle 学习笔记 11 -- 视图 (VIEW)

    本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...