Следующий 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
Чуть больше ясности - он ведет себя так, как я и ожидал, из приведенного выше кода - просто ищет что-то другое. Он меняет цвет спины, но только когда я редактирую строку. Когда я покидаю эту строку (перед сохранением изменений), цвет фона возвращается к значению по умолчанию. Я хотел бы, чтобы редактирование backcolour оставалось в каждой отредактированной строке до тех пор, пока изменения не будут сохранены. Если перед сохранением я верну данные без изменений в статистику, я бы хотел, чтобы цвет фона вернулся к значению по умолчанию.
Вот еще код:
<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 просто активирует кнопку обновления.
Это релевантная ViewModel:
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);
}
Шлюз - это простой вызов Sqlite с использованием ServiceStack OrmLite Sqlite.
Мысли