因此,我之前的问题似乎无法回答,所以我将提出自己的建议。
我正在寻找的功能是,当已经编辑了该单元格中的数据时,数据网格会更改单元格的前景(甚至背景)。
我的模型看起来像这样:
Public class Shipment : PropertyChangedBase
{
#region Fields
private ShippingService.Shipment.lbnshipment _localShipment;
private ShippingService.Shipment.lbnshipment _originalShipment;
#endregion
#region Properties
public int ShipmentID
{
get { return _localShipment.ShipmentID; }
set
{
if(value != _localShipment.ShipmentID)
{
_localShipment.ShipmentID = value;
NotifyOfPropertyChange(() => ShipmentID);
}
}
}
public Shipment(ShippingServices.Shipment.lbnShipment localshipment)
{
_originalShipment = localshipment;
_localShipment = localshipment;
}
//This Section is my best guess solution, but it just a guess
public Color HasChanged(string Property)
{
switch(Property)
{
case "ShipmentID":
if(_localShipment.ShipmentID != _originalShipment.ShipmentID)
{
return Colors.Red;
} else {
return Colors.Black;
}
break;
}
}
}
我显然已经删除了大部分属性,而HasChanged现在是纯粹的神话,但我希望的是,不知何故,我可以将DataGridTextColumn前景(或希望背景)绑定到这个HasChanged方法,并以某种方式通过它,参数当前正在调用该方法。
<DataGridTextColumn Header="ShipmentID" Binding="{Binding ShipmentID}" Foreground="{Binding HasChanged}" />
我希望有一些聪明的方法让我允许绑定识别哪个属性已经改变,就像IDataErrorInfo允许验证绑定每个属性一样。虽然我不知道它实际上是如何在后台运作的。
答案 0 :(得分:4)
它要求转换器,不是吗?所以你的绑定看起来像这样:
<DataGridTextColumn.Foreground>
<SolidColorBrush Color="{Binding Converter={StaticResource hasChangedConverter}, ConverterParameter='ShipmentID'}"/>
</DataGridTextColumn.Foreground>
你的转换器看起来像(剥离多余的代码):
class HasChangedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var shipment = value as Shipment;
var property = parameter as string;
return shipment.HasChanged(property);
}
}
更新: 如上所示在转换器参数上使用单引号应该有效。如果做不到这一点,您可以使用扩展格式进行绑定:
<SolidColorBrush.Color>
<Binding Converter="{StaticResource hasChangedConverter}" ConverterParameter="ShipmentID"/>
</SolidColorBrush.Color>
更新II:
......显然我们无法改变DataGridTextColumn
的背景,所以将列的XAML更改为以下内容:
<DataGridTemplateColumn Header="ShipmentID">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ShipmentID}">
<TextBlock.Background>
<SolidColorBrush Color="{Binding Path=ShipmentID, Converter={StaticResource HasChangedConv}}"/>
</TextBlock.Background>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 1 :(得分:1)
有两种选择:
如果此Property
内容绑定到ViewModel的UI中您可以在ViewModel
中侦听该属性的更改,然后相应地更改颜色。
如果没有,请使用命令系统。理想情况是:
- 用户界面向Command
发送ViewModel
内容已发生变化。
- ViewModel
执行命令,并更改Color
字段。需要通知UI颜色已更改。
这是ICommand接口的实现: