0
TL; DR:如果
DataGrid
细胞被绑定到特定的对象(而不是字符串,整数,...),我怎么能访问它在转换器或二传手?绑定的对象数据网格单元 - 有条件单元格样式
完整版:
我有一个绑定到一个DataTable
DataGrid
:
<Window x:Class="TabControlTests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="grid" ItemsSource="{Binding Data}" />
</Grid>
</Window>
DataTable
是动态生成的(与现实生活中的代码,我不知道列名称):
public partial class MainWindow : Window
{
public DataTable Data { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
SetDataTable();
}
private void SetDataTable()
{
var dt = new DataTable();
var name = new DataColumn("Name", typeof(object));
var age = new DataColumn("Age", typeof(int));
var home = new DataColumn("Home", typeof(string));
dt.Columns.Add(name);
dt.Columns.Add(age);
dt.Columns.Add(home);
AddRow(dt, "Kavitha Reddy", 15, "NY");
AddRow(dt, "Kiran Reddy", 24, "LA");
AddRow(dt, "John Doe", 55, "TX");
Data = dt;
}
private void AddRow(DataTable dt, string name, int age, string home)
{
var dr = dt.NewRow();
dr["Name"] = new Person(name, age >= 18);
dr["Age"] = age;
dr["Home"] = home;
dt.Rows.Add(dr);
}
}
}
请注意,对于Name
列,我分配一个对象,而不是字符串。因为已经ToString()
方法来实现它显示的名字:
public class Person
{
public string Name { get; set; }
public bool IsAdult { get; set; }
public Person(string name, bool isAdult)
{
Name = name;
IsAdult = isAdult;
}
public override string ToString()
{
return Name;
}
}
如何显示在每个有IsAdult == false
人Name
列不同的背景?我试图使用一些转换器,但我无法访问任何地方的Person
对象,我得到的只有DataGridCell
实例。
编辑
这是我试图用转换器:
<Window.Resources>
<local:ValueToBrushConverter x:Key="ValueToBrushConverter" />
<Style x:Key="CellStyle" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource ValueToBrushConverter}}" />
</Style>
</Window.Resources>
<Grid>
<DataGrid x:Name="grid" ItemsSource="{Binding Data}" CellStyle="{StaticResource CellStyle}" />
</Grid>
你在哪里以及如何使用转换器? – mm8
查看更新后的问题。 – bpiec
*“改为'object'不会改变任何东西,我仍然得到DataGridCell”*没有任何通信给我。我的答案中的代码已经过测试并完美工作。如果您无法将其推广到类似的问题,或者如果您的实际问题与您发布的代码不相似,我无法帮助您。您无法使用自动生成的列来完成此操作。祝你好运。 –