2017-04-05 3 views
1

DataGridTextColumn 편집 할 때 현재 행의 방법을 실행 : 사용자가 그리드를 편집하고 새 사용자 이름을 추가내가 현재 데이터 그리드는 사람 개체에 바인딩 한

<DataGrid ItemsSource="{Binding Person}" Width="1700" Height="840" AutoGenerateColumns="False" CanUserAddRows="true" ...> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Select" Binding="{Binding IsChecked}"/> 
     <DataGridTextColumn Header="Gender" Binding="{Binding Gender}" IsReadOnly="True"/> 
     <DataGridTextColumn Header="Username" Binding="{Binding Username}" /> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

을 나는 방법을 해고해야하는 데이터베이스로 이동하여 새 사용자 이름을 기반으로 다른 정보 (성별 등)를 채 웁니다.

현재 사용자는 사용자 이름을 입력하고 해당 행과 관련된 확인란을 선택한 다음 버튼을 클릭하여 나머지 데이터를 채 웁니다. 나는이 여분 2 단계를 제거하는 것을 시도하고있다. 이것은 자동적으로 일어나야 만한다.

MVVM 패턴을 사용하고 있습니다.

도움 주셔서 감사합니다.

+0

'CellEditEnding' 및/또는 RowEditEnding 이벤트를 사용하고 블렌드'EventTrigger'를 사용하십시오. – AnjumSKhan

+0

예를 들어 주시겠습니까? CellEditEnding 및 RowEditEnding이 인식되지 않거나 액세스 할 수없는 것 같습니다. 나는 이것에 대한 명확한 설명을 인터넷 검색 후에 발견 할 수 없다. 고맙습니다 –

답변

1

MVVM 패턴을 사용할 때 "Person"클래스에 "Username"속성이있는 것으로 가정합니다. INotifyPropertyChanged 인터페이스를 구현하고 자동 속성 인 경우 속성을 일반 속성으로 변경하고 필요한 모든 검사를 속성에 알린 후 데이터베이스 업데이트를 호출합니다. 이런 식으로 뭔가 :

private string username; 
    public string Username 
    { 
     get 
     { 
      return username; 
     } 
     set 
     { 
      username= value; 
      NotifyPropertyChanged("Username"); 
      if (<condition>) 
       PopulateData(); 
     } 
    } 

XAML에서 다음과 같이 변경 : 세포가 초점이고 데이터가 채워 것이다 손실로

<DataGridTextColumn Header="Username" Binding="{Binding Username, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" /> 

이 즉시 사용자 이름 속성의 세터를 호출합니다.

1

CellEditEnding 또는 RowEditEnding이 문제를 해결하는지 확인할 수 있습니다.

DoSomethingViewModelICommand입니다.

<DataGrid xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" ...> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="RowEditEnding"> 
       <i:InvokeCommandAction Command="{Binding DoSomething}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
     ... 

Microsoft 사이트에서 Blend Sdk을 다운로드해야합니다.

관련 문제