带有单元格更改按钮重做/撤消的数据网格



嗨,我想创建 2 个按钮重做和撤消。

我正在考虑创建两个堆栈来处理对数据网格的更改。但是我不知道将更改的值管理到单元格中的事件(焦点之后(。

我的 xaml 代码数据网格:

<DataGrid x:Name="dataGrid_Car"  Margin="10" Grid.ColumnSpan="2" ItemsSource="{Binding Path=Cars, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Constructor" Header="Constructor"  Width="*" Binding="{Binding _constructor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</DataGridTextColumn>
<DataGridTextColumn x:Name="Model" Header="Model" Width="*" Binding="{Binding model}">
</DataGridTextColumn>
<DataGridTextColumn x:Name="Price" Header="Price" Width="*" Binding="{Binding price}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>

进入模型查看定义

private ObservableCollection<Car> _cars = null;
public ObservableCollection<Car> Cars
{
get { return _cars; }
set
{
_cars = value;
NotifyPropertyChanged();
}
}

我的 NotifyPropertyChanged(( 实现:

public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

如果您要求在编辑单元格后将事件绑定到命令的方法,则应使用 Eventtrigger。

只需将绑定添加到 xaml 中的触发器:

<DataGrid x:Name="dataGrid_Car"  Margin="10" Grid.ColumnSpan="2" ItemsSource="{Binding Path=Cars, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" CanUserAddRows="False">
<i:Interaction.Triggers>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding SomeCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn x:Name="Constructor" Header="Constructor"  Width="*" Binding="{Binding _constructor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</DataGridTextColumn>
<DataGridTextColumn x:Name="Model" Header="Model" Width="*" Binding="{Binding model}">
</DataGridTextColumn>
<DataGridTextColumn x:Name="Price" Header="Price" Width="*" Binding="{Binding price}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>

并将命令添加到您的视图模型。 如果你使用mvvmlight,你可以创建一个RelayCommand,然后用它做任何你喜欢的事情。

最新更新