コードからコントロールを参照するのは良い考えではないと思います。別の(MVVM)アプローチをお勧めします。
テキストブロックにインデックスでアクセスしているので、リストに表示されていると思います。これは、XAMLでそれらをItemsControl
:として作成できることを意味します。
<ItemsControl ItemsSource="{Binding Strings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Strings
バインドするプロパティは、UIに変更が通知されるようにする必要がありますObservableCollection
。
public class ViewModel
{
private string _path;
public ViewModel()
{
Strings = new ObservableCollection<string>();
for (int i = 0; i < 50; i++)
{
Strings.Add("Value " + i);
}
}
public ObservableCollection<string> Strings { get; set; }
}
ViewModel
ページ内で次のように設定する必要がありますDataContext
:
DataContext = new ViewModel();
Strings
コレクション内の値を直接変更できます。
viewModel.Strings[12] = "NewValue";
何らかの理由でテキストブロックをページ上に個別に配置する必要がある場合は、それも実行して、コレクション内の適切なインデックスにバインドできます。
<TextBlock Text="{Binding Strings[12]}" />
この場合、コレクション内でインデックスを作成するのではなく、個別の名前付きプロパティを使用する方が理にかなっています。