DataGridTemplateColumn内にコンボボックスを作成しようとしていますが、行に応じて異なる値が含まれている必要があります。これが私のコードです:
<dg:DataGridTemplateColumn x:Name ="NameColumn" Header="Player Name">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
SelectedValue="0"
DisplayMemberPath="FullName"
SelectedValuePath="Id"
ItemsSource="{Binding AllPlayers, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
AllPlayersは、呼び出しごとに異なるリストを返します。
public List<Player> AllPlayers
{
get
{
counter = counter + 1;
Debug.Print("getting all players " + counter);
List<Player> lst = new List<Player>();
for (int i=0; i < 5; i++)
{
Player p = new Player();
p.Id = counter + i;
p.FullName = "Name " + counter + i;
lst.Add(p);
}
return lst;
}
}
何らかの理由で、AllPlayers関数が最初の39行に対して呼び出され、次にデータが以前に作成されたリストから取得されます。デバッグ情報からそれを見ることができます(39回の呼び出し後に印刷を停止します)。また、コンボボックス内のリストは一意ではありません。私はこの振る舞いの背後にある論理を理解していません。すべての行に対してAllPlayersを呼び出す必要があります。