2010-07-15 9 views
2

Regardez comment étrange est le scénario suivant:WPF4 DataGridComboBoxColumn ne fonctionne pas

<DataGrid.Columns> 
    <!--Doesn't work--> 
    <DataGridComboBoxColumn 
    Header="Vendor" 
    ItemsSource="{Binding Vendors}" 
    SelectedItemBinding="{Binding Vendor, 
    UpdateSourceTrigger=PropertyChanged}" 
    DisplayMemberPath="Contact.Title"/> 

    <!--Works--> 
    <DataGridTemplateColumn Header="Vendor"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <TextBlock DataContext="{Binding Vendor}" 
      Text="{Binding Contact.Title}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
     <ComboBox ItemsSource="{Binding Vendors}" 
      SelectedItem="{Binding Vendor, UpdateSourceTrigger=PropertyChanged}" 
      DisplayMemberPath="Contact.Title"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
    </DataGridTemplateColumn> 
</DataGrid.Columns> 

Répondre

2

J'ai posté un connection à Microsft. Microsoft m'a expliqué que puisque l'utilisation commune de la propriété ItemsSource de DataGridComboBoxColumn consiste à lier à StaticResource ou à toute autre ressource qui n'est pas différente pour chaque ligne, elle est évaluée avec le DataGrid une fois, pas par ligne , donc afin de mettre à jour le ItemsSource pour chaque ligne individuellement, un DataGridTemplateColumn et un ComboBox interne, que ItemsSource de celui-ci lie par ligne.

+0

Merci pour une bonne explication! Je n'arrivais pas à comprendre ce qui se passe sous le capot ... Mais votre solution ** fonctionne **! –