MVVM下DataGrid的简单应用
来源:互联网 发布:淘宝页头两侧图片 编辑:程序博客网 时间:2024/06/06 13:16
基于MVVM模式下DataGrid的简单应用,本实例将实现一个用户列表的展示和一些数据操作功能,如图1。
图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(); }}
0 0
- MVVM下DataGrid的简单应用
- Android 的MVVM模式的简单应用
- datagrid的一些简单应用
- WPF的MVVM DataGrid用法
- WPF---MVVM模式简单应用
- 关于datagrid的几点简单应用
- 关于datagrid的几点简单应用
- 关于datagrid的几点简单应用
- 使用MVVM构建一个简单的WPF应用
- MVVM的简单使用
- MVVM的简单使用
- WPF MVVM开发模式下,有关textbox,combobox,dataGrid的前台页面代码
- MVVM:MVVM架构的简单解析
- MVVM-Light模式,在dataGrid的模板下,绑定事件不触发的原因已经服务端排序的实现
- MVVM架构的简单解析
- MVVM架构的简单理解
- MVVM模式的简单案例
- MVVM的简单使用流程
- ViewGroup 添加移除View 常用几种方式的区别
- 02-线性结构1 一元多项式的乘法与加法运算
- 【MFC】:MFC如何实现给按钮加图标背景
- win7+iis7+asp+.net+php环境配置
- (算法问题)贪吃蛇游戏改编版
- MVVM下DataGrid的简单应用
- 剑指offer面试题之二叉树中和为某一值的所有路径
- 求素数
- poj1017 最优解问题
- Android view中invalidate方法学习小节
- C#数组复制操作
- hdoj Snooker 2060 (水)
- 设计模式之简单工厂方法模式和工厂方法模式
- 轻松记住大端小端的含义(附对大端和小端的解释)