wpf中利用多重绑定实现表中数据越界自动报警
做工控项目的朋友经常遇到这样的问题.
通过设备采集回来的数据,显示在UI中,当某些数据不再规定的范围内时,程序需要能都自动的以某种方式报警.
这里提供一个示例,当datagrid中的值大于报警上限的时候,讲值所在的单元格背景变成红色.如下图

方法很简单,在datagrid的xaml代码如下:
<DataGrid Name="dataGrid"
ItemsSource="{Binding}"
AlternatingRowBackground="LightBlue"
AlternationCount="2" AutoGenerateColumns="False"
CanUserAddRows="False" Margin="0,0,0,43">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="名称" Binding="{Binding 名称}"/>
<DataGridTextColumn Header="报警上限" Binding="{Binding 报警上限}"/>
<DataGridTemplateColumn Header="值">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding 值}" Foreground="Black">
<TextBlock.Background>
<MultiBinding Converter="{StaticResource IsAlarmConverter}">
<Binding Path="值" />
<Binding Path="报警上限"/>
</MultiBinding>
</TextBlock.Background>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="采集时间" Binding="{Binding 采集时间}"/>
</DataGrid.Columns>
</DataGrid>
注意在windows中加入资源
<Window.Resources>
<local:IsAlarmConverter x:Key="IsAlarmConverter"/>
</Window.Resources>
IsAlarmConverter类代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Globalization;
using System.Windows.Media;
namespace UsefullClass
{
public class IsAlarmConverter : IMultiValueConverter
{
public object Convert(object[] value, Type typeTarge,
object param, CultureInfo culture)
{
try
{
double value1 = double.Parse(value[0].ToString());
double value2 = double.Parse(value[1].ToString());
if (value1 > value2)
{
return Brushes.Red;
}
else return null;
}
catch
{
return null;
}
}
public object[] ConvertBack(object value, Type[] typeTarge,
object param, CultureInfo culture)
{
return null;
}
}
}
注意
public object Convert(object[] value, Type typeTarge,
object param, CultureInfo culture)
中
object[] value数组中参数的次序 和
<MultiBinding Converter="{StaticResource IsAlarmConverter}">
<Binding Path="值" />
<Binding Path="报警上限"/>
</MultiBinding>
中的顺序是一样的.即 value[0]对应当前行"值"这列单元格的值,value[1]对应改行"报警上限"的值.
工程下载地址
文件名:TestDataGrid.rar,访问地址:http://www.kuaipan.cn/index.php?ac=file&oid=25704335589508897
一些好东西顺便分享下
Microsoft.Expression.Blend.4.基础视频教程 http://www.kuaipan.cn/index.php?ac=file&oid=25704335589507145
posted on 2012-01-10 22:26 xiaxia—博客园 阅读(1249) 评论(2) 收藏 举报
浙公网安备 33010602011771号