2010-05-19 91 views
4

我使用WPF工具包DataGrid和DataGridComboBoxColumn。一切運作良好,除了在組合框發生選擇更改時,選定的值綁定源不會立即更新。只有當組合框失去焦點時纔會發生這種情況。有沒有人遇到這個問題和任何建議解決方案?WPFToolkit的DataGrid:組合框列不更新selectedvaluebinding立即

這裏列的XAML:

<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

你的XAML似乎還沒有真正過帳,你可以再試一次嗎? – JustABill 2010-05-20 04:13:50

+0

謝謝。我更新了這篇文章。 – neblinc1 2010-05-20 15:25:15

回答

3

的問題是,直到你離開細胞和更改提交 我張貼更多細節AutoCommitComboBoxColumn

解決方案中的單元格保持在編輯模式下:您需要創建自己的列類型以覆蓋默認行爲 代碼:

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

太棒了......我喜歡這個解決方案。 – neblinc1 2010-05-20 21:08:47

10

UpdateSourceTrigger =的PropertyChanged選擇在這裏至關重要,它不會離不開它。