2011-12-14 51 views
1

私はDataGridを持つWPFフォームを持っています。このDGには、ComboBoxを含むDataGridTemplateColumnが含まれています。 DGの新しい行をクリックしてComboboxから値を選択し、次の列にタブを移動すると、選択した値はコンボボックスの列に表示されません。データグリッド列は更新されません

しかし、私がタブバックすると、正しい値がコンボボックスに表示されます。

カラムからタブを外したときに、選択した値をコンボボックスカラムに表示するにはどうすればよいですか?ここで

は私のcomboxbox列XAMLです:CellTemplate

<DataGridTemplateColumn Header="Type" Width="160"> 
<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding LocationType.Description, Mode=TwoWay}"/> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <ComboBox Name="cboAddrtype" 
         ItemTemplate="{StaticResource dtAddrType}" IsSynchronizedWithCurrentItem="True" 
         ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=1}, Path=DataContext.LocationTypesObject, Mode=OneTime}" 
         SelectedItem="{Binding Path=SelectedLocationType, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" 
         SelectedValue="{Binding Path=LocationTypeKey, Mode=TwoWay}" 
         SelectedValuePath="InternalKey" 
         Width="100" /> 

     </StackPanel> 

    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

+0

なぜあなたは 'SelectedItem'と' SelectedValue'の両方を持っていますか?彼らは同じプロパティを設定する異なる方法です。 'SelectedItem'を削除することをお勧めします。これはアイテムを値ではなく参照で比較し、' OneWay'バインディングがあるからです。 – Rachel

+0

更新。私は選択したアイテムをLocationTypeに変更しました。私の場合は、正しく動作するためにSelectedItemとSelectedValueの両方が必要です。 – Jerry

答えて

1

あなたがLocationType.Descriptionを結合しているとCellEditingTemplateにあなたがSelectedLocationTypeLocationTypeKeyを結合しています。 ComboBoxからのバインディングが何とかLocationType.Descriptionに影響しないかどうかはわかりません。

さらに、SelectedLocationTypeおよびLocationTypeKeyは、DataTemplateの文脈にありません。 ViewModelを取得するには、Sourceバインディングプロパティを追加する必要があります。

関連する問題