2016-07-18 7 views
0

나는 SelectionUnit="CellOrRowHeader"으로 설정된 Datagrid를 가지고 있습니다.코드에서 소스로 편집 상태에있는 DataGrid 행

내 DataGrid가 TabControl의 컨텐트 영역에있는 상태에서 탭을 전환하면 현재 편집 된 행이 삭제됩니다.

현재 행의 DataRowView을 얻었을 때 row?.EndEdit(); (키보드의 입력 히트에 의해 트리거되지만 수동으로 호출 할 수도 있음)을 호출하여 데이터를 소스로 업데이트 할 수 있습니다. 그러나, 나는 현재 DatarRowView을 얻는 것을 보이지 않는다.

현재 편집 된 데이터를 모두 소스로 업데이트하도록 DataGrid에 알릴 수 있습니까? 내 접근 방식이 올바른지, 그렇다면 어떻게 현재를 얻을 수 있습니까 DataRowView?

그렇지 않은 경우 DataGrid가 편집 모드를 끝내고 새 데이터를 원본으로 업데이트하도록 어떻게 말합니까?

답변

0

이것은 직접적인 해결책은 아니지만 문제를 해결할 것입니다.

gui에 다른 컨트롤을 초점을 맞추기 만하면 DataGrid은 변경 내용을 현재 행에 적용합니다. DataGrid을 편집하는 동안 Enter 키를 누를 때와 같은 효과가 나타납니다.

예 :

은 내가 TabControl 있습니다. TabControl이 탭을 전환하면 현재 변경 사항이 저장되기를 원합니다.

을 TabControl의 XAML :

<TabControl DockPanel.Dock="Top" 
       x:Name="TabControl" 
       ItemsSource="{Binding Tabs}" 
       ContentTemplateSelector="{StaticResource TabContentTemplateSelector}" 
       SelectionChanged="TabControl_OnSelectionChanged" 
       IsSynchronizedWithCurrentItem="True"> 
.... 

참고 SelectionChanged="TabControl_OnSelectionChanged"하지만 당신이 원하는 다른 컨트롤에서 다른 이벤트가 될 수 있습니다. 심지어 명령도.

당신이 다음 원하는 것은, 단순히 다른 GUI 요소에 초점을한다 : 당신이 셀을 편집하는 동안 Enter 키를 누릅니다 것처럼

언급 한 바와 같이
private void TabControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // focus the tab control to lose focus on datagrids - they will then commit changes if possible. 
    TabControl.Focus(); // my TabControl is x:Name="TabControl", Focus sets the focus 
} 

, 효과가 정확히 동일합니다.

+0

나는 이것을 테스트했지만 그렇게하지는 않았다. DataGrid는 편집 모드로 유지됩니다. – rabejens

+0

흠. 그것은 내가 필요한 것에 효과가있었습니다. 편집 모드를 유지하면 무엇을 의미합니까? 문제는 편집 모드를 종료하지 않고 소스로 업데이트하도록 강요하는 것입니다. 편집 모드를 종료하려면'Cell.EndEdit()'를 호출하면됩니다. – Mafii

+0

아마도 내 문제는 약간 다릅니다. 거기에 몇 가지 데이터 그리드가있는 탭 컨트롤이 있고 탭을 전환 할 때 현재 편집중인 데이터 그리드에서 변경 내용을 적용하려고합니다. 간단히'tabControl.Focus()'를 사용하는 것은 저를 위해 속임수를 쓰지 않았습니다. 명시 적으로 각각의 DataGrid의 변경을 커밋해야했습니다. – rabejens