Он находится в DataTemplate, поэтому его нет в коде, как это делают обычные элементы управления.  Что вы можете сделать, так это немного изменить этот шаблон и делать все в XAML.  Это моя попытка:
<ListBox Grid.Column="0" Grid.Row="0" x:Name="myList" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="auto" />
                    <ColumnDefinition Width="auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Name}" />
                <ToggleButton x:Name="StartScan" Grid.Column="1" Margin="20,0,0,0" Content="Start" IsChecked="False"/>
                <ProgressBar Name="pbStatus" Grid.Column="2" Height="22" Width="50" Minimum="0" Maximum="100">
                    <ProgressBar.Style>
                        <Style TargetType="ProgressBar">
                            <Setter Property="IsIndeterminate" Value="False"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="True">
                                    <Setter Property="IsIndeterminate" Value="True"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ProgressBar.Style>
                </ProgressBar>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Что я здесь делаю, так это добавляю стиль к индикатору выполнения.  Этот стиль определяет DataTrigger, привязанный к ToggleButton.IsChecked.  Как видите, я перешел с Button на ToggleButton, поскольку ToggleButton предоставляет свойство IsChecked.  Каждый раз, когда я проверяю кнопку, я устанавливаю для IsIndeterminate значение True.
ИЗМЕНИТЬ - без использования xaml и выполнения этого в коде.
<ListBox Grid.Column="0" Grid.Row="0" x:Name="myList" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="auto" />
                    <ColumnDefinition Width="auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Name}" />
                <Button x:Name="StartScan" Grid.Column="1" Margin="20,0,0,0" Content="Start" Click="StartScan_Click"/>
                <ProgressBar Name="pbStatus" Grid.Column="2" Height="22" Width="50" Minimum="0" Maximum="100"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Мы удаляем все триггеры и сохраняем определение XAML, как и вы.  В методе события мы должны получить шаблонный родительский элемент.  В нашем случае это презентатор контента, поскольку элемент отображается в ListBox.  После этого мы должны получить шаблон и, наконец, получить экземпляр индикатора выполнения из шаблона.  Дальше это просто, так как предполагает обычную логику.
private void StartScan_Click(object sender, RoutedEventArgs e)
{
    // This is the button
    var btn = sender as Button;
    // Now we get the template that the button is in.
    var contentPresenter = (btn.TemplatedParent as ContentPresenter);
    // Finally we find the progress by its name in the template. Also we have to pass the content
    // presenter as the second argument since this is where the actual instance of the control is.
    var progress = contentPresenter.ContentTemplate.FindName("pbStatus", contentPresenter) as ProgressBar;
    // Do your logic normally as you would.
    progress.IsIndeterminate = !progress.IsIndeterminate;
    btn.Content = progress.IsIndeterminate ? "Stop" : "Start";
}
                        
                            11.02.2020