我有一个绑定了接口对象列表的WPF Datagrid。 考虑一下,ClsEmployee类使用属性Empl_Id,Empl_Name,Department,Address和City_name实现I_Employee接口。
列出_emplList;
考虑一下,_emplList有10个项目。
dgEmployeeGrid.ItemsSource = _emplList;
问题: 现在,如果用户单击按钮,那么我应该能够读取City_name。基于City_name,我应该能够通过C#代码动态设置行的颜色(每行的颜色可以不同)。
请帮我怎么做?
提前致谢!
答案 0 :(得分:2)
构建一个ValueConverter,其中包含网格中相应类型的“值”,然后将行的背景颜色绑定到该字段,并在其中使用ValueConverter来提供Color brush或者你想放在那里的任何其他类型的刷子(有意义)。
修改强>
这是一个将bool转换为Brush颜色的Converter。这个类有两个名为“True”和“False”的属性,我们将Brush设置为当布尔值与属性匹配时使用。转换器是单向的,不会将画笔转换回布尔值。
XAML创建转换器的实例并设置属性
<cga:BoolToBrushConverter x:Key="trueIsGreen"
True="Green"
False="Red"/>
C#转换代码
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolToBrushConverter : IValueConverter
{
public Brush True
{
get; set;
}
public Brush False
{
get; set;
}
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (targetType != typeof(Brush))
{
return null;
}
return ((bool) value) ? True : False;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
绑定值的示例并转换为使用画笔的对象上的字段
<Ellipse Width="10" Height="10"
Fill="{Binding Path=Reviewer.IsMentor, Mode=OneWay,
Converter={StaticResource trueIsGreen}}"/>
我假设您熟悉WPF中的数据绑定,并且不会详细说明解决方案的那个方面,但是当Reviewer.IsMentor
为真时,转换器将提供“绿色”画笔(当转换器发送时发送)创建)到椭圆的Fill属性。