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

实现的效果如下:

首先建立实体类:

更改通知类:

  1. public class NotifyPropertyChangedObject : INotifyPropertyChanged
  2. {
  3. /// <summary>
  4. /// 属性更改事件
  5. /// </summary>
  6. public event PropertyChangedEventHandler PropertyChanged;
  7.  
  8. /// <summary>
  9. /// 触发属性更改事件
  10. /// </summary>
  11. /// <param name="propertyName">属性名称</param>
  12. protected virtual void OnPropertyChanged(string propertyName)
  13. {
  14. PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
  15.  
  16. if (propertyChanged != null)
  17. {
  18. propertyChanged(this, new PropertyChangedEventArgs(propertyName));
  19. }
  20. }
  21. }

检查定义类:

  1. public class CheckDefine:NotifyPropertyChangedObject
  2. {
  3. #region Model
  4. private Guid _checkDefineId;
  5. private int _seqno;
  6. private string _checkitem;
  7. private int _checktype;
  8.  
  9. /// <summary>
  10. /// 主键id
  11. /// </summary>
  12. public Guid CheckDefineId
  13. {
  14. set
  15. {
  16. _checkDefineId = value;
  17. OnPropertyChanged("CheckDefineId");
  18. }
  19. get { return _checkDefineId; }
  20. }
  21.  
  22. /// <summary>
  23. /// 编号
  24. /// </summary>
  25. public int SeqNo
  26. {
  27. set
  28. {
  29. _seqno = value;
  30. OnPropertyChanged("SeqNo");
  31. }
  32. get { return _seqno; }
  33. }
  34. /// <summary>
  35. /// 检查项
  36. /// </summary>
  37. public string CheckItem
  38. {
  39. set
  40. {
  41. _checkitem = value;
  42. OnPropertyChanged("CheckItem");
  43. }
  44. get { return _checkitem; }
  45. }
  46. /// <summary>
  47. /// 1:bool ;2:text;3:Numeric
  48. /// </summary>
  49. public int CheckType
  50. {
  51. set
  52. {
  53. _checktype = value;
  54. OnPropertyChanged("CheckType");
  55. }
  56. get { return _checktype; }
  57. }
  58.  
  59. #endregion Model
  60. }

检查记录类:

  1. public class CheckRecord : NotifyPropertyChangedObject
  2. {
  3. #region Model
  4. private CheckDefine _checkCheckDefine;
  5. private Guid _checkid;
  6. private bool? _resultbool;
  7. private string _resulttext;
  8. private decimal? _resultnumeric;
  9. private Guid _userid1;
  10. private Guid _userid2;
  11. private DateTime? _operatingdt;
  12.  
  13. /// <summary>
  14. /// 生产前的检查(定义)
  15. /// </summary>
  16. public CheckDefine CheckDefine
  17. {
  18. set
  19. {
  20. _checkCheckDefine = value;
  21. OnPropertyChanged("CheckDefine");
  22. }
  23. get { return _checkCheckDefine; }
  24. }
  25.  
  26. /// <summary>
  27. /// 主键id
  28. /// </summary>
  29. public Guid CheckId
  30. {
  31. set
  32. {
  33. _checkid = value;
  34. OnPropertyChanged("CheckBeforeProductionRecordid");
  35. }
  36. get { return _checkid; }
  37. }
  38.  
  39. /// <summary>
  40. /// 勾选框
  41. /// </summary>
  42. public bool? ResultBool
  43. {
  44. set
  45. {
  46. _resultbool = value;
  47. OnPropertyChanged("ResultBool");
  48. }
  49. get { return _resultbool; }
  50. }
  51. /// <summary>
  52. /// 文本输入框
  53. /// </summary>
  54. public string ResultText
  55. {
  56. set
  57. {
  58. _resulttext = value;
  59. OnPropertyChanged("ResultText");
  60. }
  61. get { return _resulttext; }
  62. }
  63. /// <summary>
  64. /// 数字类型(输入框)
  65. /// </summary>
  66. public decimal? ResultNumeric
  67. {
  68. set
  69. {
  70. _resultnumeric = value;
  71. OnPropertyChanged("ResultNumeric");
  72. }
  73. get { return _resultnumeric; }
  74. }
  75. /// <summary>
  76. /// 操作人
  77. /// </summary>
  78. public Guid Userid1
  79. {
  80. set
  81. {
  82. _userid1 = value;
  83. OnPropertyChanged("Userid1");
  84. }
  85. get { return _userid1; }
  86. }
  87. /// <summary>
  88. /// 复核人
  89. /// </summary>
  90. public Guid Userid2
  91. {
  92. set
  93. {
  94. _userid2 = value;
  95. OnPropertyChanged("Userid2");
  96. }
  97. get { return _userid2; }
  98. }
  99. /// <summary>
  100. /// 检查时间
  101. /// </summary>
  102. public DateTime? Operatingdt
  103. {
  104. set
  105. {
  106. _operatingdt = value;
  107. OnPropertyChanged("Operatingdt");
  108. }
  109. get { return _operatingdt; }
  110. }
  111. #endregion Model
  112. }

xaml:

  1. <Window x:Class="DataTriggerDemo.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="MainWindow" x:Name="mainWindow">
  5. <Grid>
  6. <ListView ItemsSource="{Binding Path=CheckRecords, ElementName=mainWindow}">
  7. <ListView.View>
  8. <GridView>
  9. <GridViewColumn Header="操作指令">
  10. <GridViewColumn.CellTemplate>
  11. <DataTemplate>
  12. <TextBlock Margin="5" Text="{Binding Path=CheckDefine.CheckItem}" FontSize="16"/>
  13. </DataTemplate>
  14. </GridViewColumn.CellTemplate>
  15. </GridViewColumn>
  16. <GridViewColumn Header="操作记录">
  17. <GridViewColumn.CellTemplate>
  18. <DataTemplate>
  19. <Grid>
  20. <TextBox x:Name="txtNum" Text="{Binding Path=ResultNumeric}" TextWrapping="Wrap" Visibility="Collapsed"/>
  21. <TextBox x:Name="txtText" Text="{Binding Path=ResultText}" TextWrapping="Wrap" Visibility="Collapsed"/>
  22. <CheckBox x:Name="txtBool" IsChecked="{Binding Path=ResultBool}" Visibility="Collapsed"/>
  23. </Grid>
  24. <DataTemplate.Triggers>
  25. <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="1">
  26. <Setter TargetName="txtBool" Property="Visibility" Value="Visible" />
  27. </DataTrigger>
  28. <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="2">
  29. <Setter TargetName="txtText" Property="Visibility" Value="Visible" />
  30. </DataTrigger>
  31. <DataTrigger Binding="{Binding Path=CheckDefine.CheckType}" Value="3">
  32. <Setter TargetName="txtNum" Property="Visibility" Value="Visible" />
  33. </DataTrigger>
  34. </DataTemplate.Triggers>
  35. </DataTemplate>
  36. </GridViewColumn.CellTemplate>
  37. </GridViewColumn>
  38. </GridView>
  39. </ListView.View>
  40. </ListView>
  41. </Grid>
  42. </Window>

注:

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

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

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

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

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

C#代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Collections.ObjectModel;
  15. using DataTriggerDemo.Models;
  16.  
  17. namespace DataTriggerDemo
  18. {
  19. /// <summary>
  20. /// MainWindow.xaml 的交互逻辑
  21. /// </summary>
  22. public partial class MainWindow : Window
  23. {
  24. private ObservableCollection<CheckRecord> checkRecords;
  25. /// <summary>
  26. /// 生产前的检查记录集合
  27. /// </summary>
  28. public ObservableCollection<CheckRecord> CheckRecords
  29. {
  30. get
  31. {
  32. if (checkRecords == null)
  33. {
  34. checkRecords = new ObservableCollection<CheckRecord>();
  35. }
  36. return checkRecords;
  37. }
  38. }
  39. public MainWindow()
  40. {
  41. InitializeComponent();
  42. GetData();
  43. }
  44.  
  45. private void GetData()
  46. {
  47. CheckRecord c1 = new CheckRecord
  48. {
  49. CheckId=Guid.NewGuid(),
  50. CheckDefine = new CheckDefine
  51. {
  52. CheckDefineId=Guid.NewGuid(),
  53. SeqNo=,
  54. CheckItem = "操作间已清场合格,并在有效期内。",
  55. CheckType=
  56. }
  57.  
  58. };
  59. CheckRecords.Add(c1);
  60.  
  61. CheckRecord c2 = new CheckRecord
  62. {
  63. CheckId = Guid.NewGuid(),
  64. CheckDefine = new CheckDefine
  65. {
  66. CheckDefineId = Guid.NewGuid(),
  67. SeqNo = ,
  68. CheckItem = "操作间已清洁,并无上次生产遗留物;无与本次生产无关文件。",
  69. CheckType =
  70. }
  71.  
  72. };
  73. CheckRecords.Add(c2);
  74.  
  75. CheckRecord c3 = new CheckRecord
  76. {
  77. CheckId = Guid.NewGuid(),
  78. CheckDefine = new CheckDefine
  79. {
  80. CheckDefineId = Guid.NewGuid(),
  81. SeqNo = ,
  82. CheckItem = "所用设备、容器具已清洁消毒,且无上批次生产遗留物;已更换干净的抹布。",
  83. CheckType =
  84. }
  85.  
  86. };
  87. CheckRecords.Add(c3);
  88.  
  89. CheckRecord c4 = new CheckRecord
  90. {
  91. CheckId = Guid.NewGuid(),
  92. CheckDefine = new CheckDefine
  93. {
  94. CheckDefineId = Guid.NewGuid(),
  95. SeqNo = ,
  96. CheckItem = "所用的计量器具符合要求,在检验有效期内。",
  97. CheckType =
  98. }
  99.  
  100. };
  101. CheckRecords.Add(c4);
  102.  
  103. CheckRecord c5= new CheckRecord
  104. {
  105. CheckId = Guid.NewGuid(),
  106. CheckDefine = new CheckDefine
  107. {
  108. CheckDefineId = Guid.NewGuid(),
  109. SeqNo = ,
  110. CheckItem = "所用物料合格且标签相关信息与指令要求相一致:使用的文件与记录已备案。",
  111. CheckType =
  112. }
  113.  
  114. };
  115. CheckRecords.Add(c5);
  116.  
  117. CheckRecord c6 = new CheckRecord
  118. {
  119. CheckId = Guid.NewGuid(),
  120. CheckDefine = new CheckDefine
  121. {
  122. CheckDefineId = Guid.NewGuid(),
  123. SeqNo =,
  124. CheckItem = "操作间环境符合要求(温度18~26°C,湿度45~65%)。",
  125. CheckType =
  126. }
  127.  
  128. };
  129. CheckRecords.Add(c6);
  130.  
  131. CheckRecord c7= new CheckRecord
  132. {
  133. CheckId = Guid.NewGuid(),
  134. CheckDefine = new CheckDefine
  135. {
  136. CheckDefineId = Guid.NewGuid(),
  137. SeqNo = ,
  138. CheckItem = "所用设备完好,试运转正常;设备操作人员均持证上岗。",
  139. CheckType =
  140. }
  141.  
  142. };
  143. CheckRecords.Add(c7);
  144. }
  145. }
  146. }

运行效果:

wpf之数据触发器DataTrigger的更多相关文章

  1. WPF之数据触发器 改变控件背景色或闪烁

    需求,很多矩形表示桶,其中:空桶=红色,满桶=绿色,使用中=红绿闪烁. <Window x:Class="FlickerDemo.MainWindow" xmlns=&quo ...

  2. wpf之DataTrigger 数据触发器

    wpf中,根据数据的值的不同,UI的界面随之改变(显示控件.隐藏控件以及改变控件的其它属性), 这时我们可以用DataTrigger数据触发器. 下面两个案例实现同样的功能,当条件(数据的值)不同时, ...

  3. WPF 精修篇 数据触发器

    原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...

  4. [WPF系列]-数据邦定之DataTemplate 根据对象属性切换模板

      引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate)   切换模板的两种方式:   使用DataTemplateSelecto ...

  5. wpf中的触发器详解

    原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...

  6. WPF中的触发器简单总结

    原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一 ...

  7. wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)

    2010-03-24 16:19:07|  分类: WPF相关 |  标签: |字号大中小 订阅     wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2  简单 ...

  8. 【WPF】数据验证

    原文:[WPF]数据验证 引言      数据验证在任何用户界面程序中都是不可缺少的一部分.在WPF中,数据验证更是和绑定紧紧联系在一起,下面简单介绍MVVM模式下常用的几种验证方式. 错误信息显示 ...

  9. WPF DataTrigger数据触发器

    1.通过绑定的属性值变化,动态改变界面的显示,比如绑定了IsExpanded,当为true,grid高度变成600,反之,grid高度变成320. <Grid.Style> <Sty ...

随机推荐

  1. django+nginx+uwsgi 部署配置

    django官方文档在这 https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/uwsgi/ 第一步:先收集静态文件 之前要先设置 S ...

  2. iOS开发极光推送显示 开发证书没有通过验证 是否重新上传证书?解决方法

    1.证书密码错误 2证书环境不匹 3导证书时因手误把私钥导出来了,而不是证书 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书: ...

  3. Android启动另一个APP时,注意disable与enable的问题

    在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在. 此时遇到了一个问题,在三星设备中可以将app给处于disable ...

  4. deb

    1.APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname ...

  5. dbvisualizer参数设置

    6.13 可否完全禁用数据编辑? 可以. 方法: 在文本编辑器里打开文件 DBVIS-HOME/resources/dbvis-custom.prefs. 找出 dbvis.disabledataed ...

  6. webapi中的自定义路由约束

    Custom Route Constraints You can create custom route constraints by implementing the IHttpRouteConst ...

  7. 怎么查看window7的.net framework的版本

    第一步.打开控制面板,在大图标查看方式下,点击“程序和功能” 第二步.在程序和功能界面,点击左侧“打开或关闭Windows功能” 第三步.在打开或关闭Windows功能界面,通过拖动滚动条的方式,找到 ...

  8. 修改TFS与本地源代码映射路径

    使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”. 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”. 在“编辑工作区”对话框中: ...

  9. 数组按时间(字符串->Date)排序

    不说了 ,直接上代码.Talk is cheap , show me the code. NSArray *stortedArray = [wkSelf.dataArray sortedArrayUs ...

  10. html5学习(二)音频audio

    音频格式 当前,audio 元素支持三种音频格式:   IE 9 Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg Vorbis   √ √ √   M ...