0

以下のコードがあるとしましょう...状態と表示する実際の値を保持する Field クラスがあります。Field1 という名前のこの MyField クラスのインスタンスを定義するモデルがあります。DataGrid では、この Field1 にバインドし、スタイルを使用して値を表示し、IsStale が true の場合は背景に色を付けます。問題は値でも、背景が色付けされていることでもありません。バインディングを「Field1」として指定しても、そのまま使用すると、スタイルのデータコンテキストは MyData オブジェクトであり、実際には MyField オブジェクトではないことが問題のようです。出力されるエラーは、「BindingExpression パス エラー: 'IsStale' プロパティが 'object' ''MyDataModel' に見つかりません」です。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