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