我有一个问题就是以自定义方式绑定我的数据网格的一列。 所以,我有这个代码:
<DataGridTemplateColumn Header="State">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Background="" Content="{Binding Path=., Converter={StaticResource measureConv}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我的转换器:
public class MeasureToStateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Measure m;
try
{
m = (Measure)value;
if (m.Value > 100)
{
return "Alarm";
}
}
catch (Exception ex)
{
Debugger.Log(0, "Convertery", "Bład Convertera MeasureToState" + ex.Message);
}
return "Normal";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
内容和背景属性是自定义的。我使用转换器来检查我的集合对象是否满足某些条件结束返回String YES,或者NO,但是如果我想在一个颜色背景中有字符串字段YES,如果它是NO,则我是另一种颜色。
我怎么能这么容易? 我觉得写第二个转换器有点愚蠢。
答案 0 :(得分:1)
您可以使用两个相应的标签创建两个DataTemplates
,并使用DataTemplateSelector
代替值转换器来获取正确的模板。
答案 1 :(得分:0)
将Label的Background属性绑定到它自己的Content属性,并使用转换器返回所需的Brush:
<Label Background="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource ContentToBrushConverter}"/>
转换器将接收Content属性的值...如果等于“Yes”,则返回Brushes.Green,如果等于“No”则返回Brushes.Red
答案 2 :(得分:0)
您可以重复使用转换器设置背景并使用DataTrigger更改内容 我已经将Measure对象中的字段称为Value。
应用转换器以显示DataGrid中的列内容:
<DataGridTextColumn
Header="State"
Width="SizeToHeader"
Binding="{Binding Value, Converter={StaticResource measureConv}}"
CellStyle="{StaticResource ResourceKey=BackgroundCellStyle}"
FontSize="20" />
应用转换器来改变风格:
<Window.Resources>
<Style TargetType="{x:Type DataGridCell}" x:Key="BackgroundCellStyle">
<Setter Property="Background" Value="Aqua"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Value, Converter={StaticResource measureConv}}" Value="Alarm">
<Setter Property="Background" Value="Chartreuse"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>