假设我有下面的代码......我有一个 Field 类,它包含一个状态和要显示的实际值。我有一个模型,它定义了这个名为 Field1 的 MyField 类的实例。在 DataGrid 中,我绑定到此 Field1 并使用样式来显示值以及为背景着色(如果 IsStale 为真)。问题既不是价值,也不是背景被着色。问题似乎是,当按原样使用时,Style 的数据上下文是 MyData 对象,而不是实际上的 MyField 对象,即使我将绑定指定为“Field1”。打印出的错误是“BindingExpression 路径错误:在 'object' ''MyDataModel' 上找不到 'IsStale' 属性”。如何正确绑定到 Datagrid 中的复杂属性'
class MyField : BaseModel
{
private bool _isStale;
public bool IsStale
{
get { return _isStale; }
set
{
if (_isStale == value) return;
_isStale = value;
NotifyPropertyChanged("IsStale");
}
}
private double _value;
public double Value
{
get { return _value; }
set
{
if (_value.Equals(value)) return;
_value = value;
NotifyPropertyChanged("Value");
}
}
}
class MyDataModel
{
MyField Field1 {get; set;}
public MyData()
{
Field1 = new Field1();
//when ever underlying property of MyField changes, we need to fire property changed because xaml binds to Field1
Field1.PropertyChanged += (o,e) =>
{
MyField field = o as MyField;
if (field!=null)
NotifyPropertyChanged("Field1");
};
}
}
<DataGridTextColumn Header="Weight" Binding="{Binding Field1}" ElementStyle="{StaticResource DGCellStyle}"/>
Style:
<Style x:Key="DGCellStyle" TargetType="TextBlock">
<Setter Property="Width" Value="Auto"/>
<Setter Property="Text" Value="{Binding Value, Converter={StaticResource NumberFormatConverter}, ConverterParameter=0.00}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsStale}" Value="True">
<Setter Property="Background" Value="Pink"/>
</DataTrigger>
</Style.Triggers>
</Style>