【windows phone】CollectionViewSource的妙用
在windows phone中绑定集合数据的时候,有时候需要分层数据,通常需要以主从试图形式显示。通常的方法是将第二个ListBox(主视图)的数据源绑定到第一个ListBox
(从视图)的SelectedItem,或者通过第一个ListBox的SelectionChanged事件来设置绑定。但是借助CollectionViewSource类可以更方便的实现;
CollectionView是一个集合视图类,支持数据的排序、分组、过滤。对数据的映像进行排列组合;
CollectionViewSource是CollectionView的一个XAML代理,可以在XAML中使用;
案例说明:用主从试图关系显示两个的员工列表;效果图如下:
前期工作,创建三个类来初始数据源;
(1)Employee.cs

public class Employee
{
public int Number { get; set; } //工号
public string Name { get; set; } //姓名
public string Sex { get; set; } //性别
public int BirthYear { get; set; } //出生年份
}

(2)Department.cs
public class Department:ObservableCollection<Employee>
{
public string DepName { get; set; }
public ObservableCollection<Employee> Employees { get; set; }
}
(3)DepartmentList.cs

public class DepartmentList:ObservableCollection<Department>
{
public DepartmentList()
{
ObservableCollection<Employee> employee1 = new ObservableCollection<Employee>
{
new Employee{Number=2012,Name="netboy",Sex="boy",BirthYear=1992},
new Employee{Number=2013,Name="dandan",Sex="girl",BirthYear=2000},
new Employee{Number=2014,Name="xiaobai",Sex="girl",BirthYear=2012}
}; ObservableCollection<Employee> employee2 = new ObservableCollection<Employee>
{
new Employee{Number=2020,Name="kaizi",Sex="girl",BirthYear=2011},
new Employee{Number=2021,Name="yangzai",Sex="gril",BirthYear=2010}
}; this.Add(new Department { DepName = "技术部", Employees = employee1 });
this.Add(new Department { DepName = "商务部", Employees = employee2 });
//ObservableCollection<Department> deparment = new ObservableCollection<Department>
//{
// new Department{DepName="tengfei",Employees=employee1},
// new Department{DepName="google",Employees=employee2}
//};
} }

注意:使用ObservableCollection<T>的时候需要引用命名空间——using System.Collections.ObjectModel;
通过在新建页面的phone:PhoneApplicationPage标记中添加一个命名空间映射。代码如下:
xmlns:local="clr-namespace:数据绑定"//我的项目为“数据绑定”
添加资源字典:

<phone:PhoneApplicationPage.Resources>
<local:DepartmentList x:Key="deplist"/>
<CollectionViewSource x:Key="departmentView"
Source="{StaticResource deplist}"/>
<DataTemplate x:Key="dtEmployees">
<StackPanel Height="50"
HorizontalAlignment="Center"
Width="480"
VerticalAlignment="Top"
Orientation="Horizontal"> <TextBlock Height="50"
HorizontalAlignment="Left"
Width="90"
Text="{Binding Number}"/>
<TextBlock Height="50"
Width="120"
Text="{Binding Name}"/>
<TextBlock Height="50"
Width="120"
Text="{Binding BirthYear}"/>
<TextBlock Height="50"
Width="120"
Text="{Binding Sex}"/> </StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>

在布局页面中添加如下代码:

<TextBlock Width="300"
Height="50"
FontSize="36"
Text="请选择部门:"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10,30,0,0"/>
<ListBox Name="lb1"
Height="100"
Width="156"
DisplayMemberPath="DepName"
ItemsSource="{Binding Source={StaticResource departmentView}}"
Margin="40,86,260,0"
HorizontalAlignment="Center"
VerticalAlignment="Top" FontSize="32" />
<TextBlock Height="62"
Width="111"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding Path=DepName,Source={StaticResource departmentView}}"
Foreground="Red" Margin="12,210,0,0" FontSize="32" /> <TextBlock Height="50"
HorizontalAlignment="Right"
Text="员工列表"
VerticalAlignment="Top" Margin="0,210,169,0" Width="158" FontSize="32" /> <TextBlock Height="50"
HorizontalAlignment="Left"
Width="120"
Text="性别" Margin="344,278,0,279" FontSize="32" />
<TextBlock Height="50" Text="出生日期" Margin="204,278,112,279" FontSize="32" />
<TextBlock Height="50"
Width="120"
Text="工号" Margin="6,278,330,279" FontSize="32" />
<TextBlock Height="50"
Width="98"
Text="名字" Margin="0,278,260,279" HorizontalAlignment="Right" FontSize="32" /> <ListBox Name="lb2"
Height="170"
VerticalAlignment="Top"
ItemsSource="{Binding Path=Employees,Source={StaticResource departmentView}}"
ItemTemplate="{StaticResource dtEmployees}" Margin="12,334,-46,0" FontSize="32" />

【windows phone】CollectionViewSource的妙用的更多相关文章
- Windows类标识符及其妙用
Windows类标识符 百度百科这样解释: Windows的类标识符class identifier也称为CLASSID或CLSID,是与某一个类对象相联系的唯一标记(UUID).一个准备创建多个对象 ...
- WPF 数据绑定 使用Code First with Database
一.准备工作 1.开发工具 Visual Studio 2013 2.安装 Entity Framework 6 Tools for Visual Studio 2012 & 2013 来实现 ...
- WPF数据视图学习
当你绑定集合到ItemsControl,数据视图被安静地在幕后创造.视图位于数据源和绑定控件之间.数据视图是通往数据源的一个窗口.它跟踪当前项目,它支持诸如排序,过滤,和分组特征.这些特征独立于数据对 ...
- 21 WPF数据视图
视图对象 当你绑定集合到ItemsControl,在幕后数据视图被安静地创造.视图位于数据源和绑定控件之间.数据视图是通往数据源的一个窗口.它跟踪当前项目,它支持诸如排序,过滤,和分组特征.这些特征独 ...
- wpf mvvm datagrid数据过滤
原文:wpf mvvm datagrid数据过滤 datagrid数据过滤,你可以通过设置RowStyle属性,通过将Visibility绑定到ViewModel层的属性来控制是否可见,比如: & ...
- 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedFilesVector VirtualizedItemsVector 绑定
[源码下载] 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedF ...
- windows脚本(VBS)之cmd命令行的妙用
windows脚本(VBS)之cmd命令行的妙用 (2009-08-06 13:40:55) 转载▼ 标签: 脚本 cmd 命令行 vbs js 简单 公式 windows it 分类: 计算机 脚本 ...
- Windows地址栏的妙用
主角: 它就是windows自带的一个小工具->地址栏,可以通过在任务栏右键选择工具栏-地址栏添加使用. 妙用: 一.打开文件 使用方法:D:\Temp(文件路径) 小提示:快速进入回收站:Re ...
- 妙用psexec分析关机一直挂起的Windows update 更新
Windows 更新服务对每个IT运维人员来说都不会陌生,而且很多情况下出现的一些不兼容,产品问题通过更新都可很好的解决掉. 小弟近日为一台老爷机服务器安装Windows 产品更新就遇到了意见事情,特 ...
随机推荐
- 【BZOJ1901】Dynamic Rankings(树套树,树状数组,主席树)
题意:给定一个N个数的序列,要求维护一个数据结构支持以下两种操作: 1:将第X个数改成Y 2:查询第X到第Y个数里第K小的数是多少 n,m<=10000,a[i]<=10^9 思路:单点修 ...
- c#FileStream文件读写
//C#文件流写文件,默认追加FileMode.Append string msg = "okffffffffffffffff"; b ...
- CodeForces 141E: ...(最小生成树)
[条件转换] 两两之间有且只有一条简单路径<==>树 题意:一个图中有两种边,求一棵生成树,使得这棵树中的两种边数量相等. 思路: 可以证明,当边的权是0或1时,可以生成最小生成树到最大生 ...
- 洛谷—— P1577 切绳子
https://www.luogu.org/problemnew/show/P1577 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长? ...
- cf744
Codeforces Round #385 (Div. 1) <br > A.Hongcow Builds A Nation 贪心. 显然就是凑成一个最大的块即可 那么首先并查集处理已经确 ...
- Office 各版本下载链接
Office 2007 链接: https://pan.baidu.com/s/1pNJDlafw6KQSlljRUAQtWw 提取码: xoml 密钥:DBXYD-TF477-46YM4-W74MH ...
- idea的快捷键和操作
IntelliJ Idea 常用快捷键列表 修改方法如下: 点击 文件菜单(File) –> 点击 设置(Settings… Ctrl+Alt+S), –> 打开设置对话框. 在左侧的 ...
- Spring Boot中实现异步调用之@Async
一.什么是异步调用 “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用 的语句返回结果 ...
- 【java】httpclient的使用之java代码内发送http请求
场景: 需要本项目发送HTTP请求到另一个项目中,处理完成返回值给本项目. 1.本项目引入架包 <!-- httpclient 后台发送http请求--> <dependency&g ...
- 【CSS】使用CSS控制文字过多自动省略号
使用CSS可以设置一下样式: <style> u,small{ overflow: hidden; text-overflow: ellipsis; display: -webkit-bo ...