使用 MVVM 设计触发 DataGrid 单元格编辑事件
Fire a DataGrid Cell Edit Event with MVVM Design
我正在使用 Galasoft 进行 WPF 数据网格和 MVVM 设计。几列是可编辑的,我需要在单元格编辑期间执行数据库调用。
我正在尝试捕获单元格编辑期间的事件。我可以使用 Galsoft 中的 EventToCommand 选项来做到这一点。但是 EventToCommand 应用于网格级别,并且每个单元格单击事件都会触发该事件。我不想发生这种情况。
<DataGrid Grid.Column="0" Grid.Row="1" CanUserResizeRows="False" AutoGenerateColumns="False" x:Name="AdvisorDataGrid" HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" IsReadOnly="False" RowHeaderWidth="0"
Background="White" CanUserSortColumns="True" GridLinesVisibility="All" IsTabStop="False"
ItemsSource="{Binding MemberAdvisorsList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}"
IsEnabled="{Binding IsGridAdvisorsEnabled}" CanUserAddRows="True" EnableRowVirtualization="True"
CurrentCellChanged="DataGrid_CurrentCellChanged" SelectedItem="{Binding SelectedMemberDetails,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="OnFocus">
<cmd:EventToCommand PassEventArgsToCommand="True" Command="{Binding NavigateToArticleCommand,Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
此外,为了防止每个单元格事件,我将 EventToCommand 移动到列级别,但事件没有被触发。
无论如何,我可以做到这一点吗?另外,捕获单元格编辑完成操作的最佳事件名称是什么?我目前正在使用 LostFocus,但即使我第一次点击它也会被解雇。
非常感谢任何帮助。
谢谢
我最后添加了一个条件检查来过滤我需要执行 CellEditEnding
操作的列。
基本上,OnCellEditEnding
事件,我检查是否Column.Header.equals("Column1")
然后执行动作。
默认情况下,所有单元格都会发生此事件。
我正在使用 Galasoft 进行 WPF 数据网格和 MVVM 设计。几列是可编辑的,我需要在单元格编辑期间执行数据库调用。
我正在尝试捕获单元格编辑期间的事件。我可以使用 Galsoft 中的 EventToCommand 选项来做到这一点。但是 EventToCommand 应用于网格级别,并且每个单元格单击事件都会触发该事件。我不想发生这种情况。
<DataGrid Grid.Column="0" Grid.Row="1" CanUserResizeRows="False" AutoGenerateColumns="False" x:Name="AdvisorDataGrid" HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" IsReadOnly="False" RowHeaderWidth="0"
Background="White" CanUserSortColumns="True" GridLinesVisibility="All" IsTabStop="False"
ItemsSource="{Binding MemberAdvisorsList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}"
IsEnabled="{Binding IsGridAdvisorsEnabled}" CanUserAddRows="True" EnableRowVirtualization="True"
CurrentCellChanged="DataGrid_CurrentCellChanged" SelectedItem="{Binding SelectedMemberDetails,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="OnFocus">
<cmd:EventToCommand PassEventArgsToCommand="True" Command="{Binding NavigateToArticleCommand,Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
此外,为了防止每个单元格事件,我将 EventToCommand 移动到列级别,但事件没有被触发。
无论如何,我可以做到这一点吗?另外,捕获单元格编辑完成操作的最佳事件名称是什么?我目前正在使用 LostFocus,但即使我第一次点击它也会被解雇。
非常感谢任何帮助。
谢谢
我最后添加了一个条件检查来过滤我需要执行 CellEditEnding
操作的列。
基本上,OnCellEditEnding
事件,我检查是否Column.Header.equals("Column1")
然后执行动作。
默认情况下,所有单元格都会发生此事件。