如何解决是否可以根据聚合条件设置WPF数据网格行的格式?
我从SQL加载数据网格,然后将其与
绑定myDataGrid.ItemsSource = dt.DefaultView
dt是我的数据表。我知道如何根据其中一列中的显式值突出显示一行:
<DataTrigger Binding="{Binding someNumberA}" Value="1">
<Setter Property="Background" Value="Red" />
</DataTrigger>
但是要说我有两列someNumberA和someNumberB并想基于布尔聚合突出显示该行,例如sNA-sNB> 5则为红色。在XAML中是否可能这样做(如果不能),那么我又该怎么办呢,因为我从未使用直接从数据表中直接加载的方法来显式创建类?现在,我确实有一种方法可以通过在SQL中创建一个布尔列来使其工作,因此我具有显式的T / F值,然后突出显示该值并隐藏该列。感谢您的输入。
在我建议使用转换器之后,我想出了一个很好的工作解决方案。
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Value="False">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource CheckGreaseTolerance}">
<Binding Path = "GREASE_UPPER"/>
<Binding Path ="GREASE_LOWER"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
它调用的类:
Public Class CheckGreaseTolerance
Implements IMultiValueConverter
Public Function Convert(values() As Object,targetType As Type,parameter As Object,culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
Dim GU As Decimal = CDec(values(0))
Dim GL As Decimal = CDec(values(1))
If GU - GL > 2 Then
Return False
Else
Return True
End If
End Function
解决方法
如果您的数据项具有可修改的视图模型,则将添加一个布尔属性以显示聚合结果,就像在SQL中使用单独的列的替代方法一样。
在XAML中,您可以将value converters用于不同类型的聚合函数,并将其用于数据触发器。您可以创建IValueConverter
并绑定数据行,也可以创建IMultiValueConverter
来直接传递数据行的特定属性,甚至绑定其他属性,例如来自父数据上下文。
您的 someNumberA-someNumberB> 5 示例的值转换器看起来像这样,取一个DataGridRow
作为值和一个double
参数进行比较。>
public class SampleAggregateConverter : IValueConverter
{
public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
var dataRowView = (DataRowView)value;
return (double)dataRowView["someNumberA"] - (double)dataRowView["someNumberB"] > (double)parameter;
}
public object ConvertBack(object value,CultureInfo culture)
{
throw new InvalidOperationException("This conversion is one-way only.");
}
}
然后以行样式,可以通过绑定行并使用转换器来应用数据触发器。
<DataTrigger Value="True">
<DataTrigger.Binding>
<Binding Converter="{StaticResource SampleAggregateConverter}">
<Binding.ConverterParameter>
<system:Double>5.0</system:Double>
</Binding.ConverterParameter>
</Binding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Red" />
</DataTrigger>
绑定有点冗长,因为直接分配ConverterParameter
会导致绑定作为string
传递到转换器。多值转换器可能有助于您绑定参数值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。