C# 基于编辑状态在XAML数据网格中设置行背景颜色
在编辑行时,以下XAML可用于更改背景颜色:C# 基于编辑状态在XAML数据网格中设置行背景颜色,c#,wpf,xaml,wpf-controls,wpfdatagrid,C#,Wpf,Xaml,Wpf Controls,Wpfdatagrid,在编辑行时,以下XAML可用于更改背景颜色: <DataGrid.RowStyle> <Style TargetType="DataGridRow" > <Setter Property="Background" Value="AntiqueWhite" /> <Style.Triggers> <Trigger Property="IsEditing" Va
<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 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);
}
private observeCollection currentTransactionList;
公共可观测集合CurrentTransactionList{
获取{return currentTransactionList;}
设置{
如果(值!=currentTransactionList){
currentTransactionList=值;
NotifyPropertyChanged(“CurrentTransactionList”);
}
}
}
public void SetCurrentTransactionList(长项目ID){
CurrentTransactionList=Gateway.GetTransactions(ItemId);
}
public void UpdateTransactions(){
Gateway.UpdateTransactions(CurrentTransactionList);
}
网关是使用ServiceStack或MLite Sqlite对Sqlite的简单调用
想法?我建议在视图模型上添加一个新属性,比如
IsDirty
,然后您可以使用DataTrigger
触发该属性,当然,您必须自己使用正确的DataGrid
事件或内部更改通知来更改属性。如果我是您,我会查看设置,然后在您要将更改提交到viewmodel时触发该方法。通过这种方式,可以指定实际编辑属性的时间
我会仔细研究一下,看看iEdit是如何与之对应的。我以前从未真正使用过这个UpdateSourceTrigger值,所以我不知道。它至少可以很好地控制属性更新的方式
否则,如果这不好,那么H.B.所说的就是正确的,这就是你应该做的。谢谢,我最终做了这件事——保留了一个编辑ID的集合。为编辑/更新行着色的逻辑对于触发器来说太复杂,因此需要在代码中完成。