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」*沒有任何通信給我。我的答案中的代碼已經過測試並完美工作。如果您無法將其推廣到類似的問題,或者如果您的實際問題與您發佈的代碼不相似,我無法幫助您。您無法使用自動生成的列來完成此操作。祝你好運。 –