2017-04-05 91 views
1

我現在有一個DataGrid綁定到Person對象時執行的當前行的方法:編輯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'事件並使用Blend'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}" /> 

這會盡快致電用戶名setter方法爲細胞失去它的焦點,數據將得到填充。

1

您可以看到CellEditEndingRowEditEnding是否解決了您的問題。

DoSomething是您的ViewModel中的ICommand

<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