5

INotifyPropertyChangedインターフェイスを実装するオブジェクトを使用して、DataGridの列を監視可能なコレクションに正常にバインドしました。

これはxamlです:

<dxg:GridColumn Name="Name" FieldName="Stapel" DisplayMemberBinding="{Binding Path=Name}" />

そして、objectsクラスのプロパティ:

public string Name
    {
        get { return _name; }
        set
        {
            if (value == _name) return;
            _name = value;
            OnPropertyChanged("Name");
        }
    }

しかし、別のコラムでは、テンプレートを使用しています。

<dxg:GridColumn.CellTemplate>
    <DataTemplate>
        <StackPanel>
                <Rectangle Height="19" Width="19" Fill="{Binding Path=Data.StatusColor}"></Rectangle>
        </StackPanel>
    </DataTemplate>
</dxg:GridColumn.CellTemplate>

長方形のFillプロパティは、「計算された」プロパティにバインドされています。

public SolidColorBrush StatusColor
{
    get
    {
        if (StapelStatus == StapelStatus.Neu)
        {
            return new SolidColorBrush(Colors.CornflowerBlue);
        }
        return new SolidColorBrush(Colors.DarkOrange);
    }
}

の値を変更する他のいくつかのプロパティセッターStapelStatusが呼び出し ています

OnPropertyChanged("StatusColor"); 

グリッド列の長方形の色も変更するにはこれで十分だと思いました。しかし、残念ながら、StapelStatusが変更さOnPropertyChanged("StatusColor")れてグリッドと呼ばれる場合、この変更は反映されません。どういうわけか、のバインディングを変更する必要があると思いDataTemplateます。誰かアドバイスをいただけますか?

4

2 に答える 2

1

これは機能しますか?

public Whatever StapelStatus
{
    get { return _stapelStatus; }
    set
    {
        _stapelStatus = value;
        OnPropertyChanged("StapelStatus");
        StatusColor = value == StapelStatus.Neu ? new SolidColorBrush(Colors.CornflowerBlue) : new SolidColorBrush(Colors.DarkOrange);
    }
}

public Brush StatusColor
{
    get { return _statusColor; }
    set
    {
        _statusColor = value;
        OnPropertyChanged("StatusColor");
    }
}
于 2012-12-19T19:17:45.593 に答える
0

それは確かにXAMLの結合問題でした。残念ながら、GridColumnにFieldNameプロパティを設定しませんでした。FieldNameは、テンプレートを持たない通常のGridColumnsでのみ使用できると思いました。

列の動作中のXAMLの下:

<dxg:GridColumn Header="" FieldName="StatusColor">
    <dxg:GridColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Rectangle RadiusX="19" RadiusY="19" Height="19" Width="19" Stroke="Black" Fill="{Binding Path=Value}"></Rectangle>
                </StackPanel>
        </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
于 2012-12-20T10:45:48.193 に答える