「PlayerNo」(Int32) や「PlayerName」(String) などのプロパティを保持するクラスを作成します。クラスを「PlayerInfo」と呼びましょう。
次に、PlayerInfo の ObservableCollection を作成し、そこにプレイヤーの数を追加します。それをプレーヤーと呼びましょう。XAML でクラスを使用できるように、すべてのプロパティに対して Dependency Property を作成し、UI が自動的に更新されるように INotifyPropertyChanged を無視します。
this.Players = new ObservableCollection<PlayerInfo>();
this.Players.Add(new PlayerInfo() { PlayerNo=0, PlayerName=null });
this.Players.Add(new PlayerInfo() { PlayerNo=1, PlayerName=null });
this.Players.Add(new PlayerInfo() { PlayerNo=2, PlayerName=null });
次に、ItemsSource からモデル クラスの Players プロパティへのバインドを持つ ItemsPresenter コントロールを XAML で作成します。前のラウンドのプレーヤーなどに基づいて「PlayerName」などを入力することもできます。「null」に設定して説明しました(もちろんこれは必須ではなく、単なる説明です)。
<ItemsControl ItemsSource="{Binding Path=Players, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<StackPanel Orientation="Vertical" />
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,20,0,0">
<TextBlock Text="Player" />
<TextBlock Text="{Binding Path=PlayerNo, Mode=OneWay}" Margin="10,0,20,0" />
<TextBox Text="{Binding Path=PlayerName, Mode=TwoWay}" Width="200" />
</StackPanel>
</DataTemplate>
<ItemsControl.ItemTemplate>
</ItemsControl>
ItemsPresenter クラスの場合、「Player」の後に「PlayerId」番号が続く TextBlock を保持する ItemTemplate を作成します。そして、Text プロパティからアイテムの「PlayerName」プロパティへのバインドを持つ TextBox を使用します。
この方法では、分離コードと XAML はほとんどありません。それは簡単な解決策です。また、プレーヤーの詳細もすべて使用できる状態にします。