如何以红色显示未保存的更改

  • 本文关键字:保存 显示 红色 c# wpf
  • 更新时间 :
  • 英文 :


我的WPF应用程序中有一个数据网格,它有一个可编辑列,用于Device类的Value属性。然而,我已经这样做了,所以只有当用户单击"保存"按钮时,更改才会更新。我想让用户的更改在数据网格上变成红色,而他们还没有保存更改,但我不知道如何做到这一点。这是我的Device类的相关部分:

private string _value;
public string Value
{
get { return _value; }
set
{
base.SetProperty(ref this._value, value);
if (value != OriginalValue)
{
isDirty = true;
}
}
}

private string _originalValue;
public string OriginalValue
{
get { return _originalValue; }
set
{
base.SetProperty(ref _originalValue, value);
}
}
public void Commit()
{
this.OriginalValue = this.Value;
}

这是保存按钮的处理程序:

private void SaveButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Changes have been saved to Database");
foreach (Device foo in MasterDataGrid.ItemsSource)
{
foo.Commit();
}
}

没有附加数据库,这只是一个风格文本。

我已经尝试将isDirty布尔值添加到设备类中,但我不知道如何将该布尔值链接到DataGrid中的文本颜色。以下是DataGrid的相关XAML:

<DataGridTemplateColumn Header="Value">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid FocusManager.FocusedElement="{Binding ElementName=textBox1}">
<TextBox Name="textBox1" TextChanged="TextBox1_OnTextChanged" GotFocus="TextBox_GotFocus"  Margin="0" Padding="-2" MaxHeight="29"  Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Value, Mode=TwoWay,UpdateSourceTrigger=Explicit}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我尝试过使用OnTextChanged处理程序,但我不知道如何引用正在显示其值的Device对象。我觉得我可能很接近,但有几个环节缺失。

如果有人能帮我一把,我将不胜感激。谢谢你的帮助!

在Form1.cs[Design]上,您可以右键单击感兴趣的数据网格视图并选择"编辑列"。然后选择了要变为红色的列,在"Unbound column Properties"的"Appearance"部分有一个DefaultCellStyle部分,转到该部分并单击它的[…]按钮。现在,在打开的选项卡中,将ForColor更改为红色。这样,该列将自动显示红色文本。当你点击保存按钮时,如果你添加:,数据网格视图中的文本可以变为黑色

DataGridView.Columns["Value"].DefaultCellStyle.ForeColor = Color.Black;

到按钮单击方法。

最新更新