WPF DataGrid CellEditEnded事件

Ars*_*ray 5 c# data-binding wpf wcf datagrid

我希望每次用户编辑DataGrid单元格的内容时都知道.有CellEditEnding事件,但是在对DataGrid绑定的集合进行任何更改之前调用它.

我的datagrid绑定到ObservableCollection<Item>哪个Item类,从WCF mex端点自动生成.

每次用户提交更改集合时,最好的方法是什么.

UPDATE

我尝试过CollectionChanged事件,结束时Item修改时不会触发它.

小智 8

您可以UpdateSourceTrigger=PropertyChanged在datagrid的属性成员的绑定上使用.这将确保在触发CellEditEnding时,更新已反映在可观察集合中.

见下文

<DataGrid SelectionMode="Single"
          AutoGenerateColumns="False"
          CanUserAddRows="False"
          ItemsSource="{Binding Path=Items}" // This is your ObservableCollection
          SelectedIndex="{Binding SelectedIndexStory}">
          <e:Interaction.Triggers>
              <e:EventTrigger EventName="CellEditEnding">
                 <cmd:EventToCommand PassEventArgsToCommand="True" Command="{Binding EditStoryCommand}"/> // Mvvm light relay command
               </e:EventTrigger>
          </e:Interaction.Triggers>
          <DataGrid.Columns>
                    <DataGridTextColumn Header="Description"
                        Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" /> // Name is property on the object i.e Items.Name
          </DataGrid.Columns>

</DataGrid>
Run Code Online (Sandbox Code Playgroud)

UpdateSourceTrigger = PropertyChanged将在目标属性更改时立即更改属性源.

这将允许您捕获对项目的编辑,因为向可观察集合添加事件处理程序更改事件不会触发对集合中对象的编辑.


Dam*_*cus -1

您应该只在您的事件上添加一个事件处理ObservableCollection程序CollectionChanged

代码片段:

_listObsComponents.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(ListCollectionChanged);

// ...


    void ListCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        /// Work on e.Action here (can be Add, Move, Replace...)
    }
Run Code Online (Sandbox Code Playgroud)

e.Actionis 时Replace,这意味着列表中的一个对象已被替换。该事件当然是在应用更改后触发的

玩得开心!