【问题标题】:How to show unsaved changes in red?如何以红色显示未保存的更改?
【发布时间】:2018-07-24 15:51:22
【问题描述】:

我的 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 对象。我觉得我可能很接近,但是缺少一些链接。

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

【问题讨论】:

标签: c# wpf


【解决方案1】:

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

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

到按钮点击方法。

【讨论】:

  • 这对我不起作用。语法甚至看起来都不正确
  • 抱歉没用,您是否完全按照代码上方的说明进行操作?
  • 不幸的是,没有。我不确定您是否使用与我不同的 Visual Studio 版本(或者您是否使用完全不同的 IDE),但我没有看到这些选项。
猜你喜欢
  • 2019-10-03
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多