Все вещи возможны в WPF, так или иначе (или, как правило, оба, плюс еще куча).
Сначала простая часть - если вы правильно реализовали INotifyPropertyChanged для объекта в вашем массиве, привязки должны обновляться правильно. INotifyCollectionChanged уведомляет вас, если элементы в коллекции изменились (т.е. были добавлены / удалены).
Похоже, вы пытаетесь обновить неизвестный номер (или даже известный номер, это не имеет значения) TextBlocks. Вероятно, лучший способ сделать это - использовать некоторый вид ItemsControl (ListBox равен одному) с ItemsTemplate и, необязательно, ItemsPanel. Это будет самый простой способ обслуживания в случае изменения определения коллекции.
Например, вот один пример ItemsControl.
<ItemsControl x:Name="itemsExample"
ItemsSource="{Binding MyCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel HorizontalAlignment="Stretch" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SomeStringProperty}" Grid.Column="0" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Однако, если вы действительно хотите связать отдельные TextBlocks, вы можете сделать это одним из способов, реализовав IValueConverter . Затем вы должны связать каждый из ваших TextBlocks с коллекцией и использовать ConverterParameter с соответствующим индексом. Затем преобразователь просто возвращает значение строки с этим индексом.
<TextBlock Text="{Binding MyCollection,
Converter={StaticResource myObjectConverter},
ConverterParameter=0}" />
Если вы используете MVVM, другой возможностью является наличие свойств для каждого из элементов вашего массива и привязка к этим свойствам. Однако, если вы делаете это, я бы поставил под сомнение необходимость использования массива.