2011-11-22 74 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