2011-12-14 2 views
1

DataGrid가있는 WPF 폼이 있습니다. 이 DG에는 ComboBox가 포함 된 DataGridTemplateColumn이 들어 있습니다. DG의 새 행을 클릭하고 Combobox에서 값을 선택한 다음 탭을 사용하여 다음 열로 이동하면 선택한 값이 콤보 상자 열에 계속 표시되지 않습니다.DataGrid 열이 업데이트되지 않습니다.

그러나 뒤로 돌아 가면 올바른 값이 콤보 박스에 표시됩니다.

열을 탭 해제 할 때 선택한 값이 콤보 박스 열에 계속 나타나게하려면 어떻게해야합니까?

<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

CellTemplate에서는 LocationType.Description을 결합하고 있으며 CellEditingTemplate에 당신은 SelectedLocationTypeLocationTypeKey을 결합하고 있습니다 :

여기 내 comboxbox 열 XAML입니다. ComboBox에서 귀하의 바인딩이 어떻게 든 LocationType.Description에 영향을 미치지 않을지 확신하지 못합니다.

또한, SelectedLocationTypeLocationTypeKeyDataTemplate과 관련이 없습니다. ViewModel을 가져 오려면 Source 바인딩 속성을 추가해야합니다.

관련 문제