我的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
对象。我觉得我可能已经接近了,但缺少一些链接。
如果有人可以帮我,我将不胜感激。感谢您的帮助!
答案 0 :(得分:0)
在Form1.cs [Design]上,可以右键单击感兴趣的数据网格视图,然后选择“编辑列”。然后选择您要变为红色的列,并在“未绑定列属性”的“外观”部分中,为DefaultCellStyle设置一个部分,转到该部分并单击其[...]按钮。现在,在打开的选项卡中,将ForColor更改为红色。这样,此列将自动具有红色文本。单击“保存”按钮时,如果添加,则数据网格视图中的文本可以更改为黑色。
DataGridView.Columns["Value"].DefaultCellStyle.ForeColor = Color.Black;
单击按钮的方法。