当行正在编辑下面的XAML工作正常,改变背景颜色:设置行背景颜色
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" >
<Setter Property="Background" Value="AntiqueWhite" />
<Style.Triggers>
<Trigger Property="IsEditing" Value="true">
<Setter Property="Background" Value="red" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
但我也想有下列行为:
- 改回保存后
- 如果编辑破灭,变回默认的颜色默认颜色
关于如何做到这一点的任何建议?
UPDATE:
一点更清晰 - 它的行为我希望上面的代码 - 只是在寻找不同的东西。它改变了背景颜色,但只在我编辑该行时。当我离开那一行(保存更改之前)时,背景颜色会恢复为默认值。我希望编辑背景保留在每个编辑的行上,直到保存更改。如果我在保存前将数据更改回原来的状态,我希望背景颜色重置为默认值。
下面是更多的代码:
<DataGrid EnableRowVirtualization="True" ItemsSource="{Binding CurrentTransactionList}" AutoGenerateColumns="false" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="5" Name="TransactionTable" VerticalAlignment="Stretch" RowEditEnding="TransactionTable_RowEditEnding">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" >
<Setter Property="Background" Value="AntiqueWhite" />
<Style.Triggers>
<Trigger Property="IsEditing" Value="true">
<Setter Property="Background" Value="red" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Width="40" Binding="{Binding Id}" IsReadOnly="True" Foreground="Gray" />
<DataGridTextColumn Header="Label" Width="250" Binding="{Binding Label}" />
<DataGridComboBoxColumn Header="Stat" SelectedItemBinding="{Binding Stat}" ItemsSource="{Binding Source={StaticResource stats}}" Width="125" />
<DataGridTextColumn Header="Change" Binding="{Binding Change}" Width="75" />
</DataGrid.Columns>
的TransactionTable_RowEditEnding事件处理程序只允许更新按钮。
这是relavent视图模型:
private ObservableCollection<StatTransactionValue> currentTransactionList;
public ObservableCollection<StatTransactionValue> CurrentTransactionList {
get { return currentTransactionList; }
set {
if (value != currentTransactionList) {
currentTransactionList = value;
NotifyPropertyChanged("CurrentTransactionList");
}
}
}
public void SetCurrentTransactionList(long ItemId) {
CurrentTransactionList = Gateway.GetTransactions(ItemId);
}
public void UpdateTransactions() {
Gateway.UpdateTransactions(CurrentTransactionList);
}
网关是一个简单的通话使用ServiceStack OrmLite SQLite的对于SQLite。
想法?
谢谢,我最终这样做 - 保留编辑ID的集合。为编辑/更新的行着色的逻辑对于触发器来说太复杂,因此需要在代码中完成。 – IUnknown 2012-03-20 15:32:43