2010-05-19 15 views
4

J'utilise WPF Toolkit DataGrid et DataGridComboBoxColumn. Tout fonctionne bien, sauf que lorsque la modification de sélection se produit sur la zone de liste déroulante, la source de liaison de sélection sélectionnée n'est pas mise à jour immédiatement. Cela se produit uniquement lorsque la zone de liste déroulante perd le focus. Quelqu'un at-il rencontré ce problème et des solutions de suggestions?WPFToolkit DataGrid: La colonne Combobox ne met pas à jour la liaison de valeur sélectionnée immédiatement

Voici le XAML pour la colonne:

<toolkit:DataGridComboBoxColumn Header="Column" SelectedValueBinding="{Binding Path=Params.ColumnName, UpdateSourceTrigger=PropertyChanged}" 
       DisplayMemberPath="cName" 
       SelectedValuePath="cName"> 
       <toolkit:DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Info.Columns}" /> 
        </Style> 
       </toolkit:DataGridComboBoxColumn.ElementStyle> 
       <toolkit:DataGridComboBoxColumn.EditingElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Info.Columns}" /> 
        </Style> 
       </toolkit:DataGridComboBoxColumn.EditingElementStyle> 
      </toolkit:DataGridComboBoxColumn> 
+0

Votre XAML semble ne pas avoir été publié, pouvez-vous réessayer? – JustABill

+0

Merci. J'ai mis à jour le post. – neblinc1

Répondre

3

Le problème est que la cellule reste en mode Edit jusqu'à ce que vous quittez la cellule et les changements sont engagés j'ai posté plus de détails dans AutoCommitComboBoxColumn

Solution : vous devez créer votre propre type de colonne pour remplacer le comportement par défaut code:

public class AutoCommitComboBoxColumn : Microsoft.Windows.Controls.DataGridComboBoxColumn 
{ 
    protected override FrameworkElement GenerateEditingElement(Microsoft.Windows.Controls.DataGridCell cell, object dataItem) 
    { 
     var comboBox = (ComboBox)base.GenerateEditingElement(cell, dataItem); 
     comboBox.SelectionChanged += ComboBox_SelectionChanged; 
     return comboBox; 
    } 

    public void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     CommitCellEdit((FrameworkElement)sender); 
    } 
} 
+0

Génial ... J'aime cette solution. – neblinc1

10

UpdateSourceTrigger = L'option PropertyChanged est cruciale ici, elle ne s'en passe pas.