當行正在編輯下面的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