您的位置:首页 > 其它

wpf中利用多重绑定实现表中数据越界自动报警

2012-01-10 22:26 531 查看
做工控项目的朋友经常遇到这样的问题.

通过设备采集回来的数据,显示在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: