INotifyPropertyChanged绑定到GridColumn中的DataTemplate

时间:2012-12-19 19:11:58

标签: c# wpf xaml gridview inotifypropertychanged

我已成功将DataGrid中的列绑定到具有实现INotifyPropertyChanged接口的对象的可观察集合:

这是xaml:

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

对象类中的属性:

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属性绑定到&#34;计算的&#34;属性:

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中的绑定。有人可以给我一个建议吗?

2 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分: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>