2017-04-05 15 views
1

DataGridTextColumn編集するときに、現在の行のメソッドを実行する:ユーザーがグリッドを編集し、新しいユーザー名を追加しますは、私は現在、データグリッドは、Personオブジェクトにバインドされている

<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> 

を、私はこの方法を発射する必要がありますデータベースにアクセスして、新しいユーザー名に基づいて他の情報(Genderなど)を設定します。

現在、ユーザはユーザ名を入力し、その行に関連付けられたチェックボックスをチェックし、ボタンをクリックして残りのデータを入力します。私はこれらの余分な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が問題を解決しているかどうかを確認できます。

DoSomethingは、ViewModelICommandです。

<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> 
     ... 

マイクロソフトのサイトからBlend Sdkをダウンロードする必要があります。

関連する問題