【发布时间】:2021-06-20 23:45:08
【问题描述】:
尝试根据 WPF DataGrid 中的单元格对象属性设置单元格的背景,但出现错误,找不到该属性(但在行对象上):
System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MyRow”(HashCode=48826322)上找不到“IsOn”属性。绑定表达式:路径=IsOn; DataItem='MyRow' (HashCode=48826322);目标元素是'DataGridCell'(名称='');目标属性是“NoTarget”(类型“对象”)
我想知道,为什么 DataTrigger 绑定正在寻址行对象“MyRow”,因为 DataTrigger 是为/在 CellStyle 中定义的。
XAML:
<DataGrid Name="tblTest" Grid.Column="2" IsReadOnly="True" AutoGenerateColumns="True">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="PaleGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsOn}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
C#
class MyCell
{
public MyCell( string v)
{
Value = v;
}
public string Value { get; set; }
public bool IsOn { get => Value == "one"; }
public override string ToString()
{
return Value;
}
}
class MyRow
{
public MyCell One { get; set; }
public MyCell Two { get; set; }
}
void SetupTestTable()
{
List<MyRow> data = new();
data.Add(new MyRow
{
One = new MyCell("one"),
Two = new MyCell("two")
});
tblTest.ItemsSource = data;
}
那么如何正确绑定单元格对象“MyCell”呢?
【问题讨论】:
-
您的数据行数据上下文是 Myrow 实例,并且单元格根据在 myrow 实例上定义的属性显示。由于这些属性是复杂类型,因此使用应该导航到 mycell,然后访问 IsOn 属性。
-
感谢 Neelesh,我认为您的方法可用于具有静态布局的表,但不适用于启用 AutogenerateColumns 的 DataGrids。
标签: c# wpf xaml datagrid datatrigger