博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wpf之数据触发器DataTrigger
阅读量:7143 次
发布时间:2019-06-29

本文共 8940 字,大约阅读时间需要 29 分钟。

wpf, 根据绑定的属性的值的不同(数据分类),界面上显示不同的控件(绑定不同类型的属性),可以使用数据库触发器DataTrigger实现这一功能。

实现的效果如下:

 

首先建立实体类:

更改通知类:

public class NotifyPropertyChangedObject : INotifyPropertyChanged    {        ///         /// 属性更改事件        ///         public event PropertyChangedEventHandler PropertyChanged;        ///         /// 触发属性更改事件        ///         /// 属性名称        protected virtual void OnPropertyChanged(string propertyName)        {            PropertyChangedEventHandler propertyChanged = this.PropertyChanged;            if (propertyChanged != null)            {                propertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }    }
View Code

检查定义类:

public class CheckDefine:NotifyPropertyChangedObject    {        #region Model        private Guid _checkDefineId;        private int _seqno;        private string _checkitem;        private int _checktype;        ///         /// 主键id        ///         public Guid CheckDefineId        {            set            {                _checkDefineId = value;                OnPropertyChanged("CheckDefineId");            }            get { return _checkDefineId; }        }              ///         /// 编号        ///         public int SeqNo        {            set            {                _seqno = value;                OnPropertyChanged("SeqNo");            }            get { return _seqno; }        }        ///         /// 检查项        ///         public string CheckItem        {            set            {                _checkitem = value;                OnPropertyChanged("CheckItem");            }            get { return _checkitem; }        }        ///         /// 1:bool ;2:text;3:Numeric        ///         public int CheckType        {            set            {                _checktype = value;                OnPropertyChanged("CheckType");            }            get { return _checktype; }        }                #endregion Model    }
View Code

检查记录类:

public class CheckRecord : NotifyPropertyChangedObject    {        #region Model        private CheckDefine _checkCheckDefine;        private Guid _checkid;        private bool? _resultbool;        private string _resulttext;        private decimal? _resultnumeric;        private Guid _userid1;        private Guid _userid2;        private DateTime? _operatingdt;        ///         /// 生产前的检查(定义)        ///         public CheckDefine CheckDefine        {            set            {                _checkCheckDefine = value;                OnPropertyChanged("CheckDefine");            }            get { return _checkCheckDefine; }        }        ///         /// 主键id        ///         public Guid CheckId        {            set            {                _checkid = value;                OnPropertyChanged("CheckBeforeProductionRecordid");            }            get { return _checkid; }        }        ///         /// 勾选框        ///         public bool? ResultBool        {            set            {                _resultbool = value;                OnPropertyChanged("ResultBool");            }            get { return _resultbool; }        }        ///         /// 文本输入框        ///         public string ResultText        {            set            {                _resulttext = value;                OnPropertyChanged("ResultText");            }            get { return _resulttext; }        }        ///         /// 数字类型(输入框)        ///         public decimal? ResultNumeric        {            set            {                _resultnumeric = value;                OnPropertyChanged("ResultNumeric");            }            get { return _resultnumeric; }        }        ///         /// 操作人        ///         public Guid Userid1        {            set            {                _userid1 = value;                OnPropertyChanged("Userid1");            }            get { return _userid1; }        }        ///         /// 复核人        ///         public Guid Userid2        {            set            {                _userid2 = value;                OnPropertyChanged("Userid2");            }            get { return _userid2; }        }        ///         /// 检查时间        ///         public DateTime? Operatingdt        {            set            {                _operatingdt = value;                OnPropertyChanged("Operatingdt");            }            get { return _operatingdt; }        }        #endregion Model    }
View Code

 

xaml:

View Code

 

注:

    从xaml中可知:ListView的ItemsSource绑定了CheckRecords集合,

ListView的第二列的CellTemplate里是一Grid里有两个TextBox和一个CheckBox控件,

三个控件分别绑定到了CheckRecord类的三个不同类型的属性,且三个控件都默认是不可见的。

 

在DataTemplate.Triggers中绑定了三个DataTrigger,且都绑定到了CheckDefine.CheckType这个属性,

从而根据CheckDefine.CheckType的值来决定三个控件中哪个控件可见(Visibility="Visible")

C#代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Collections.ObjectModel;using DataTriggerDemo.Models;namespace DataTriggerDemo{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        private ObservableCollection
checkRecords; ///
/// 生产前的检查记录集合 /// public ObservableCollection
CheckRecords { get { if (checkRecords == null) { checkRecords = new ObservableCollection
(); } return checkRecords; } } public MainWindow() { InitializeComponent(); GetData(); } private void GetData() { CheckRecord c1 = new CheckRecord { CheckId=Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId=Guid.NewGuid(), SeqNo=1, CheckItem = "操作间已清场合格,并在有效期内。", CheckType=1 } }; CheckRecords.Add(c1); CheckRecord c2 = new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo = 2, CheckItem = "操作间已清洁,并无上次生产遗留物;无与本次生产无关文件。", CheckType = 1 } }; CheckRecords.Add(c2); CheckRecord c3 = new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo = 3, CheckItem = "所用设备、容器具已清洁消毒,且无上批次生产遗留物;已更换干净的抹布。", CheckType = 1 } }; CheckRecords.Add(c3); CheckRecord c4 = new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo = 4, CheckItem = "所用的计量器具符合要求,在检验有效期内。", CheckType = 1 } }; CheckRecords.Add(c4); CheckRecord c5= new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo = 5, CheckItem = "所用物料合格且标签相关信息与指令要求相一致:使用的文件与记录已备案。", CheckType = 1 } }; CheckRecords.Add(c5); CheckRecord c6 = new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo =6, CheckItem = "操作间环境符合要求(温度18~26°C,湿度45~65%)。", CheckType =2 } }; CheckRecords.Add(c6); CheckRecord c7= new CheckRecord { CheckId = Guid.NewGuid(), CheckDefine = new CheckDefine { CheckDefineId = Guid.NewGuid(), SeqNo = 7, CheckItem = "所用设备完好,试运转正常;设备操作人员均持证上岗。", CheckType =3 } }; CheckRecords.Add(c7); } }}
View Code

 

运行效果:

转载于:https://www.cnblogs.com/527289276qq/p/4804239.html

你可能感兴趣的文章
巴厘岛最全的美食攻略
查看>>
eclipse svn插件中英文切换
查看>>
C#学习常用命名空间【1000】---System.Reflection 之MethodInfo(方法信息类)
查看>>
Android Fragment完全解析,关于碎片你所需知道的一切
查看>>
map存储格式
查看>>
Nginx解决CORS跨域解决方案
查看>>
iPhone开发中touch的事件随笔
查看>>
115个Java面试题和答案 - 终极列表
查看>>
巧用 honeyd 实现星形结构分布式软件的压力测试框架
查看>>
数据库存储过程变量问题
查看>>
Vim的操作
查看>>
004 centos7安装jenkins
查看>>
把Nginx注册成Windows 系统服务(转载)
查看>>
我的友情链接
查看>>
ME60X系列产品有几种子接口
查看>>
Tomcat 框架
查看>>
linux启动流程
查看>>
调整netapp存储显示名
查看>>
【22】Python基础学习笔记1
查看>>
计算机多任务
查看>>