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

时间:2018-07-24 15:51:23

标签: c# wpf

我的WPF应用程序中有一个数据网格,并且它具有Value类的Device属性的可编辑列。但是,我已经做到了,因此更改仅在用户单击“保存”按钮时更新。我想让用户的更改在尚未保存更改的情况下在数据网格上变为红色,但是我不知道如何进行这项工作。这是我的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对象。我觉得我可能已经接近了,但缺少一些链接。

如果有人可以帮我,我将不胜感激。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在Form1.cs [Design]上,可以右键单击感兴趣的数据网格视图,然后选择“编辑列”。然后选择您要变为红色的列,并在“未绑定列属性”的“外观”部分中,为DefaultCellStyle设置一个部分,转到该部分并单击其[...]按钮。现在,在打开的选项卡中,将ForColor更改为红色。这样,此列将自动具有红色文本。单击“保存”按钮时,如果添加,则数据网格视图中的文本可以更改为黑色。

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

单击按钮的方法。