0

假设我有下面的代码......我有一个 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>
4

0 回答 0