我試圖在DataGridTemplateColumn中創建組合框,但它應該包含取決於行的不同值。這是我的代碼:DataGrid中的每一行都不會調用ComboBox的綁定
<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。
我無法更改綁定到datagrid的集合,因爲它是從DataLayer自動生成的DataTable。 – sergman
我知道你不會喜歡這個答案,但你可以從DataTable構建一個自定義對象並綁定到該對象。爲了高效使用DataReader。如果您正在使用DataTable的高級功能(如編輯功能),那麼這種功能的吸引力就更小了。您可以使用Relation創建一個DataSet並手動將您的Player添加到DataSet中。我在Windows窗體中進行了綁定,但是自從WPF和List以及ObservableCollection之後,我已經離開了DataSets。 – Paparazzi