WPF – Accessing controls in Async
Changing the UI from other threads using Async should be done mostly with $State and DataContext binding as described in the other section
However, there are situations in which you would like to access control, for example, to execute one of its methods
In Async, you can use $SyncHash.Window to access the controls. You need to first use a dispatcher and use Windows method FindName to find your control by providing its name
as in the below example which finds a DataGrid object, adds new items to it, and executes its method to scroll to a certain position:
function Add-Source { Async {
$SyncHash.Window.Dispatcher.Invoke( { #You need to invoke the dispatcher in order to connect to the controls
foreach ($item in (1..10000)) {
$SyncHash.Window.FindName("DataGrid").ItemsSource.Add( #You need to find the control by it's name you assigned
[PSCustomObject]@{ Action = "test" Result = "test" })
}
$DataGrid = $SyncHash.Window.FindName("DataGrid")
$DataGrid.ScrollintoView($DataGrid.Items[$DataGrid.Items.Count - 1]); }, 'Normal')
}
}