DataGrid更新的WPF事件

时间:2015-03-27 08:41:10

标签: c# wpf vb.net mvvm datagrid

我有一个带有dataGrid的视图:

<DataGrid x:Name="DARViewer"
                      AutoGenerateColumns="True"
                      ItemsSource="{Binding DataSourceTable,
                                            NotifyOnSourceUpdated=True,
                                            UpdateSourceTrigger=Default}" />

我还有10个按钮,每次点击其中一个我调用一个更新DataSourceTable的命令(是我的ViewModel中的数据表属性)。
代码工作正常,每次我点击一个按钮,我的数据网格都有相应的数据。

我的问题是我找不到每次更改DataSourceTable时引发的datagrid事件。

PS。我尝试了DARViewer.DataContextChanged(这很有意义)和DARViewer.SourceUpdated但它们无法正常工作

按钮执行的命令是:

  Private Sub LoadReportExecute(sender)
    Id = sender.DataContext.Id
    ChangeDataSourceTable()
  End Sub

 Public Sub ChangeDataSourceTable()
    DataSourceTable = Nothing
    DataSourceTable = ExecuteCommand(DataSource) 'that just returns a datatable
 End Sub

 Private mdtDataSourceTable As  DataTable
 Public Property DataSourceTable() As DataTable
    Get
        Return mdtDataSourceTable
    End Get
    Set(ByVal value As DataTable)
        mdtDataSourceTable = value
        RaisePropertyChanged("DataSourceTable")
    End Set
 End Property

2 个答案:

答案 0 :(得分:0)

您可以使用ItemsSourceChangedEvent。

有关详细信息,请查看此处提供的答案:

How to raise an event when DataGrid.ItemsSource is changed

答案 1 :(得分:0)

在Marcus提供的解决方案之后,我将使用VB.NET的代码发布相同的解决方案,以防有人需要它。

 Private Sub ReportView_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    Dim gridItemsSourceDescriptor As DependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(DataGrid.ItemsSourceProperty, GetType(DataGrid))
    gridItemsSourceDescriptor.AddValueChanged(Me.DARViewer, _
                                               New EventHandler(AddressOf OnDataGridItemsSourceChanged))
End Sub


Private Sub OnDataGridItemsSourceChanged(sender As Object, e As EventArgs)
    'Code here
End Sub