我有一个带有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
答案 0 :(得分:0)
您可以使用ItemsSourceChangedEvent。
有关详细信息,请查看此处提供的答案:
答案 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