2011-11-22 71 views
0

我DataGridComboBoxColumn DataGrid中:DataGridComboBoxColumn结合问题

<DataGridComboBoxColumn Header="{x:Static Properties:Resources.Unit}" Width="Auto" 

            SelectedValueBinding="{Binding UnitUnitId}" 
            SelectedValuePath="UnitId" 
            DisplayMemberPath="Name" > 
       <DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Units,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/> 
        </Style> 
       </DataGridComboBoxColumn.ElementStyle> 
       <DataGridComboBoxColumn.EditingElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Units,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/> 
        </Style> 
       </DataGridComboBoxColumn.EditingElementStyle> 

      </DataGridComboBoxColumn> 

和ComboBox:

<ComboBox x:Name="unitBox" ItemsSource="{Binding Path=Units}" 
       SelectedItem="{Binding TaxSubGroup.Unit}" 
       Grid.Row="2" 
       Grid.Column="1" Margin="11,11,0,0" HorizontalAlignment="Stretch"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Converter={x:Static c:UnitToStringConverter.Default}}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

单位属性:

public ObservableCollection<Unit> Units 
    { 
     get 
     { 
      return _units; 
     } 
     set 
     { 
      if(_units!=value) 
      { 
       _units = value; 
       RaisePropertyChanged("Units"); 
      } 
     } 
    } 
当我改变了组合框的值

,DataGridComboBoxColumn的值更新自动,但更改DataGrid的comboboxcolumn的值不更新组合框va略。为什么?

修订

的问题是DataGridComboBoxCulumn的SelectedValueBinding财产。我需要的是添加UpdateSourceTrigger属性:

SelectedValueBinding="{Binding UnitUnitId,UpdateSourceTrigger=PropertyChanged}" 

回答

0

是否要更新在UnitUnitId setter方法TaxSubGroup.Unit

在你的DataContext模型类做一些类似的...

public int UnitUnitId 
{ 
    get 
    { 
     return this.unitID; 
    } 
    set 
    { 
     this.unitID = value; 
     this.TaxSubGroup.Unit = Units.FirstOrDefault(u => u.UnitID == value); 
     this.NotifyPropertyChange("UnitUnitId"); 
    } 
} 

这将通过参考匹配ComboboxSelectedItem

+0

谢谢你的回答。真的,我使用的是实体框架,默认情况下对象实现INotifyPropertyChanged接口。 – Alex