wpf之数据触发器DataTrigger
wpf, 根据绑定的属性的值的不同(数据分类),界面上显示不同的控件(绑定不同类型的属性),可以使用数据库触发器DataTrigger实现这一功能。
实现的效果如下:
首先建立实体类:
更改通知类:
- public class NotifyPropertyChangedObject : INotifyPropertyChanged
- {
- /// <summary>
- /// 属性更改事件
- /// </summary>
- public event PropertyChangedEventHandler PropertyChanged;
- /// <summary>
- /// 触发属性更改事件
- /// </summary>
- /// <param name="propertyName">属性名称</param>
- protected virtual void OnPropertyChanged(string propertyName)
- {
- PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
- if (propertyChanged != null)
- {
- propertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- }
检查定义类:
- public class CheckDefine:NotifyPropertyChangedObject
- {
- #region Model
- private Guid _checkDefineId;
- private int _seqno;
- private string _checkitem;
- private int _checktype;
- /// <summary>
- /// 主键id
- /// </summary>
- public Guid CheckDefineId
- {
- set
- {
- _checkDefineId = value;
- OnPropertyChanged("CheckDefineId");
- }
- get { return _checkDefineId; }
- }
- /// <summary>
- /// 编号
- /// </summary>
- public int SeqNo
- {
- set
- {
- _seqno = value;
- OnPropertyChanged("SeqNo");
- }
- get { return _seqno; }
- }
- /// <summary>
- /// 检查项
- /// </summary>
- public string CheckItem
- {
- set
- {
- _checkitem = value;
- OnPropertyChanged("CheckItem");
- }
- get { return _checkitem; }
- }
- /// <summary>
- /// 1:bool ;2:text;3:Numeric
- /// </summary>
- public int CheckType
- {
- set
- {
- _checktype = value;
- OnPropertyChanged("CheckType");
- }
- get { return _checktype; }
- }
- #endregion Model
- }
检查记录类:
- 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;
- /// <summary>
- /// 生产前的检查(定义)
- /// </summary>
- public CheckDefine CheckDefine
- {
- set
- {
- _checkCheckDefine = value;
- OnPropertyChanged("CheckDefine");
- }
- get { return _checkCheckDefine; }
- }
- /// <summary>
- /// 主键id
- /// </summary>
- public Guid CheckId
- {
- set
- {
- _checkid = value;
- OnPropertyChanged("CheckBeforeProductionRecordid");
- }
- get { return _checkid; }
- }
- /// <summary>
- /// 勾选框
- /// </summary>
- public bool? ResultBool
- {
- set
- {
- _resultbool = value;
- OnPropertyChanged("ResultBool");
- }
- get { return _resultbool; }
- }
- /// <summary>
- /// 文本输入框
- /// </summary>
- public string ResultText
- {
- set
- {
- _resulttext = value;
- OnPropertyChanged("ResultText");
- }
- get { return _resulttext; }
- }
- /// <summary>
- /// 数字类型(输入框)
- /// </summary>
- public decimal? ResultNumeric
- {
- set
- {
- _resultnumeric = value;
- OnPropertyChanged("ResultNumeric");
- }
- get { return _resultnumeric; }
- }
- /// <summary>
- /// 操作人
- /// </summary>
- public Guid Userid1
- {
- set
- {
- _userid1 = value;
- OnPropertyChanged("Userid1");
- }
- get { return _userid1; }
- }
- /// <summary>
- /// 复核人
- /// </summary>
- public Guid Userid2
- {
- set
- {
- _userid2 = value;
- OnPropertyChanged("Userid2");
- }
- get { return _userid2; }
- }
- /// <summary>
- /// 检查时间
- /// </summary>
- public DateTime? Operatingdt
- {
- set
- {
- _operatingdt = value;
- OnPropertyChanged("Operatingdt");
- }
- get { return _operatingdt; }
- }
- #endregion Model
- }
xaml:
- <Window x:Class="DataTriggerDemo.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" x:Name="mainWindow">
- <Grid>
- <ListView ItemsSource="{Binding Path=CheckRecords, ElementName=mainWindow}">
- <ListView.View>
- <GridView>
- <GridViewColumn Header="操作指令">
- <GridViewColumn.CellTemplate>
- <DataTemplate>
- <TextBlock Margin="5" Text="{Binding Path=CheckDefine.CheckItem}" FontSize="16"/>
- </DataTemplate>
- </GridViewColumn.CellTemplate>
- </GridViewColumn>
- <GridViewColumn Header="操作记录">
- <GridViewColumn.CellTemplate>
- <DataTemplate>
- <Grid>
- <TextBox x:Name="txtNum" Text="{Binding Path=ResultNumeric}" TextWrapping="Wrap" Visibility="Collapsed"/>
- <TextBox x:Name="txtText" Text="{Binding Path=ResultText}" TextWrapping="Wrap" Visibility="Collapsed"/>
- <CheckBox x:Name="txtBool" IsChecked="{Binding Path=ResultBool}" Visibility="Collapsed"/>
- </Grid>
- <DataTemplate.Triggers>
- <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="1">
- <Setter TargetName="txtBool" Property="Visibility" Value="Visible" />
- </DataTrigger>
- <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="2">
- <Setter TargetName="txtText" Property="Visibility" Value="Visible" />
- </DataTrigger>
- <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="3">
- <Setter TargetName="txtNum" Property="Visibility" Value="Visible" />
- </DataTrigger>
- </DataTemplate.Triggers>
- </DataTemplate>
- </GridViewColumn.CellTemplate>
- </GridViewColumn>
- </GridView>
- </ListView.View>
- </ListView>
- </Grid>
- </Window>
注:
从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
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- private ObservableCollection<CheckRecord> checkRecords;
- /// <summary>
- /// 生产前的检查记录集合
- /// </summary>
- public ObservableCollection<CheckRecord> CheckRecords
- {
- get
- {
- if (checkRecords == null)
- {
- checkRecords = new ObservableCollection<CheckRecord>();
- }
- return checkRecords;
- }
- }
- public MainWindow()
- {
- InitializeComponent();
- GetData();
- }
- private void GetData()
- {
- CheckRecord c1 = new CheckRecord
- {
- CheckId=Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId=Guid.NewGuid(),
- SeqNo=,
- CheckItem = "操作间已清场合格,并在有效期内。",
- CheckType=
- }
- };
- CheckRecords.Add(c1);
- CheckRecord c2 = new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo = ,
- CheckItem = "操作间已清洁,并无上次生产遗留物;无与本次生产无关文件。",
- CheckType =
- }
- };
- CheckRecords.Add(c2);
- CheckRecord c3 = new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo = ,
- CheckItem = "所用设备、容器具已清洁消毒,且无上批次生产遗留物;已更换干净的抹布。",
- CheckType =
- }
- };
- CheckRecords.Add(c3);
- CheckRecord c4 = new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo = ,
- CheckItem = "所用的计量器具符合要求,在检验有效期内。",
- CheckType =
- }
- };
- CheckRecords.Add(c4);
- CheckRecord c5= new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo = ,
- CheckItem = "所用物料合格且标签相关信息与指令要求相一致:使用的文件与记录已备案。",
- CheckType =
- }
- };
- CheckRecords.Add(c5);
- CheckRecord c6 = new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo =,
- CheckItem = "操作间环境符合要求(温度18~26°C,湿度45~65%)。",
- CheckType =
- }
- };
- CheckRecords.Add(c6);
- CheckRecord c7= new CheckRecord
- {
- CheckId = Guid.NewGuid(),
- CheckDefine = new CheckDefine
- {
- CheckDefineId = Guid.NewGuid(),
- SeqNo = ,
- CheckItem = "所用设备完好,试运转正常;设备操作人员均持证上岗。",
- CheckType =
- }
- };
- CheckRecords.Add(c7);
- }
- }
- }
运行效果:
wpf之数据触发器DataTrigger的更多相关文章
- WPF之数据触发器 改变控件背景色或闪烁
需求,很多矩形表示桶,其中:空桶=红色,满桶=绿色,使用中=红绿闪烁. <Window x:Class="FlickerDemo.MainWindow" xmlns=&quo ...
- wpf之DataTrigger 数据触发器
wpf中,根据数据的值的不同,UI的界面随之改变(显示控件.隐藏控件以及改变控件的其它属性), 这时我们可以用DataTrigger数据触发器. 下面两个案例实现同样的功能,当条件(数据的值)不同时, ...
- WPF 精修篇 数据触发器
原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...
- [WPF系列]-数据邦定之DataTemplate 根据对象属性切换模板
引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate) 切换模板的两种方式: 使用DataTemplateSelecto ...
- wpf中的触发器详解
原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...
- WPF中的触发器简单总结
原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一 ...
- wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)
2010-03-24 16:19:07| 分类: WPF相关 | 标签: |字号大中小 订阅 wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2 简单 ...
- 【WPF】数据验证
原文:[WPF]数据验证 引言 数据验证在任何用户界面程序中都是不可缺少的一部分.在WPF中,数据验证更是和绑定紧紧联系在一起,下面简单介绍MVVM模式下常用的几种验证方式. 错误信息显示 ...
- WPF DataTrigger数据触发器
1.通过绑定的属性值变化,动态改变界面的显示,比如绑定了IsExpanded,当为true,grid高度变成600,反之,grid高度变成320. <Grid.Style> <Sty ...
随机推荐
- django+nginx+uwsgi 部署配置
django官方文档在这 https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/uwsgi/ 第一步:先收集静态文件 之前要先设置 S ...
- iOS开发极光推送显示 开发证书没有通过验证 是否重新上传证书?解决方法
1.证书密码错误 2证书环境不匹 3导证书时因手误把私钥导出来了,而不是证书 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书: ...
- Android启动另一个APP时,注意disable与enable的问题
在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在. 此时遇到了一个问题,在三星设备中可以将app给处于disable ...
- deb
1.APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname ...
- dbvisualizer参数设置
6.13 可否完全禁用数据编辑? 可以. 方法: 在文本编辑器里打开文件 DBVIS-HOME/resources/dbvis-custom.prefs. 找出 dbvis.disabledataed ...
- webapi中的自定义路由约束
Custom Route Constraints You can create custom route constraints by implementing the IHttpRouteConst ...
- 怎么查看window7的.net framework的版本
第一步.打开控制面板,在大图标查看方式下,点击“程序和功能” 第二步.在程序和功能界面,点击左侧“打开或关闭Windows功能” 第三步.在打开或关闭Windows功能界面,通过拖动滚动条的方式,找到 ...
- 修改TFS与本地源代码映射路径
使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”. 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”. 在“编辑工作区”对话框中: ...
- 数组按时间(字符串->Date)排序
不说了 ,直接上代码.Talk is cheap , show me the code. NSArray *stortedArray = [wkSelf.dataArray sortedArrayUs ...
- html5学习(二)音频audio
音频格式 当前,audio 元素支持三种音频格式: IE 9 Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg Vorbis √ √ √ M ...