MVVM下DataGrid的简单应用
2016-04-03 18:35
459 查看
基于MVVM模式下DataGrid的简单应用,本实例将实现一个用户列表的展示和一些数据操作功能,如图1。
图1
实例要求:
(1)实现用户列表的绑定。
(2)绑定性别属性时,使用Converter对性别属性的转化。
(3)绑定日期时,对日期格式的转换。
(4)点击“编辑”按钮能够获取用户信息。
(5)点击“删除”按钮能够获取用户编号。
1、实体层
在实体层中创建用户信息实体类(UserModel.cs)。
2、ViewModel层
在ViewModel层中创建用户列表ViewModel类(UserListViewModel.cs)。
3、表现层
在表现层中创建Converter目录,并创建SexConverter.cs,用于对性别属性的转换。
创建用户列表窗体(UserList.xaml)。
前台代码:
后台代码:
图1
实例要求:
(1)实现用户列表的绑定。
(2)绑定性别属性时,使用Converter对性别属性的转化。
(3)绑定日期时,对日期格式的转换。
(4)点击“编辑”按钮能够获取用户信息。
(5)点击“删除”按钮能够获取用户编号。
1、实体层
在实体层中创建用户信息实体类(UserModel.cs)。
/// <summary> /// 用户信息实体类 /// </summary> public class UserModel : INotifyPropertyChanged { private int _id; /// <summary> /// 编号 /// </summary> public int Id { get { return _id; } set { _id = value; this.NotifyPropertyChanged("Id"); } } private string _name; /// <summary> /// 姓名 /// </summary> public string Name { get { return _name; } set { _name = value; this.NotifyPropertyChanged("Name"); } } private int _sex; /// <summary> /// 性别(0:男,1:女) /// </summary> public int Sex { get { return _sex; } set { _sex = value; this.NotifyPropertyChanged("Sex"); } } private DateTime? _jobDate; /// <summary> /// 入职时间 /// </summary> public DateTime? JobDate { get { return _jobDate; } set { _jobDate = value; this.NotifyPropertyChanged("JobDate"); } } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
2、ViewModel层
在ViewModel层中创建用户列表ViewModel类(UserListViewModel.cs)。
/// <summary> /// 用户列表ViewModel类 /// </summary> public class UserListViewModel : INotifyPropertyChanged { public List<UserModel> _userList = new List<UserModel>(); /// <summary> /// 用户列表 /// </summary> public List<UserModel> UserList { get { return this._userList; } set { this._userList = value; this.RaisePropertyChanged("_userList"); } } /// <summary> /// 初始化 /// </summary> public UserListViewModel() { //加载数据 UserList = new List<UserModel>(){ new UserModel(){Id=1,Name="张三",Sex=0,JobDate=DateTime.Now}, new UserModel(){Id=2,Name="李四",Sex=1,JobDate=DateTime.Now}, new UserModel(){Id=3,Name="王五",Sex=0,JobDate=DateTime.Now}, new UserModel(){Id=4,Name="孙六",Sex=0,JobDate=DateTime.Now}, new UserModel(){Id=5,Name="黄七",Sex=1,JobDate=DateTime.Now}, }; } //属性改变事件 public event PropertyChangedEventHandler PropertyChanged; //当属性改变的时候,调用该方法来发起一个消息,通知View中绑定了propertyName的元素做出调整 public void RaisePropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } } /// <summary> /// 编辑命令 /// </summary> public class EditCommand : ICommand { public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { UserModel userInfo = parameter as UserModel; if(userInfo!=null) { //执行编辑 } } } /// <summary> /// 删除命令 /// </summary> public class DeleteCommand : ICommand { public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { int id = (int)parameter; if (id > 0) { //执行删除 } } }
3、表现层
在表现层中创建Converter目录,并创建SexConverter.cs,用于对性别属性的转换。
public class SexConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string result = ""; string sex = value.ToString(); if (sex == "0") { result = "男"; } else if (sex == "1") { result = "女"; } return result; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
创建用户列表窗体(UserList.xaml)。
前台代码:
<Window x:Class="Simple.Calculator.WinForm.UserList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:Simple.Calculator.ViewModel;assembly=Simple.Calculator.ViewModel" xmlns:conv="clr-namespace:Simple.Calculator.WinForm.Converter" Title="用户列表" Height="260" Width="400"> <Window.Resources> <!--DataGrid样式--> <Style TargetType="{x:Type DataGrid}" x:Key="gDataGrid"> <Setter Property="Margin" Value="0,10,0,10"/> <Setter Property="HorizontalGridLinesBrush" Value="#c5cfd8"/> <Setter Property="VerticalGridLinesBrush" Value="#c5cfd8"/> <Setter Property="AutoGenerateColumns" Value="False"/> <Setter Property="CanUserSortColumns" Value="False"/> <Setter Property="IsReadOnly" Value="True"/> </Style> <Style TargetType="DataGridRow"> <Setter Property="Height" Value="32"/> <Setter Property="FontSize" Value="12" /> </Style> <Style TargetType="DataGridColumnHeader"> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="MinWidth" Value="0" /> <Setter Property="MinHeight" Value="32" /> <Setter Property="Foreground" Value="#667a95" /> <Setter Property="FontSize" Value="14" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridColumnHeader"> <Border x:Name="BackgroundBorder" BorderThickness="0,1,0,1" BorderBrush="#e6dbba" Width="Auto"> <Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <ContentPresenter Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"/> <Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Grid.Column="2" Width="8" Height="6" Fill="White" Margin="0,0,50,0" VerticalAlignment="Center" RenderTransformOrigin="1,1" /> <Rectangle Width="1" Fill="#c5cfd8" HorizontalAlignment="Right" Grid.ColumnSpan="1" /> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="Height" Value="30"/> </Style> <!--命令--> <vm:EditCommand x:Key="EditCommand"/> <vm:DeleteCommand x:Key="DeleteCommand"/> <!--Converter--> <conv:SexConverter x:Key="SexConverter"/> </Window.Resources> <!--列表--> <DataGrid Grid.Row="1" Margin="10" Style="{StaticResource gDataGrid}" ItemsSource="{Binding UserList, Mode=TwoWay}"> <DataGrid.Columns> <DataGridTextColumn Header="姓名" Width="90" Binding="{Binding Name}"/> <DataGridTextColumn Header="性别" Width="90" Binding="{Binding Sex,Converter={StaticResource SexConverter}}"/> <DataGridTextColumn Header="入职时间" Width="*" Binding="{Binding JobDate,StringFormat=yyyy-MM-dd}"/> <DataGridTemplateColumn Header="操作" Width="90"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="详情" Margin="10,0" Command="{StaticResource EditCommand}" CommandParameter="{Binding}" /> <Button Content="删除" Command="{StaticResource DeleteCommand}" CommandParameter="{Binding Id}" /> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Window>
后台代码:
/// <summary> /// UserList.xaml 的交互逻辑 /// </summary> public partial class UserList : Window { public UserList() { InitializeComponent(); this.DataContext = new UserListViewModel(); } }
相关文章推荐
- python截取郑州大学贴吧网页
- dos批处理命令详解
- Win10下的Telnet
- javascript设计模式 单体模式
- leetcode——101——Symmetric Tree
- translation from thephilosophy writing of gottlob frege
- 设置 Linux 文件和文件夹权限的方法
- MySQL MERGE引擎简介
- 各种颜色RGB值【附c#中获取颜色的argb值】
- 在s5pv210开发板上移植官方2101310版本的uboot
- BZOJ2671: Calc
- Scala语言基础
- grub应用
- linux帐号防暴力破解脚本
- 计算机图形学三角形基元填充算法即三角形光栅化重心双线性插值算法
- UVa 1225 Digit Counting --- 水题
- sat-solver
- Android学习笔记---第二天---基础UI组件---EditText
- 计算群论 Schreier-Sim algorithm
- Java并发编程系列之十二:死锁、饥饿和活锁