2010-01-19 100 views
3

我有一個對象列表綁定到DataGrid在WPF頁面中,我正在尋找添加一個對象直接在當前之後,如果在特定列中輸入的值小於某個數字。TextChanged/LostFocus /等。事件DataGridTextColumn

<my:DataGridTextColumn Binding="{Binding Path=Hours}"/> 

我不能爲我的生活弄清楚如何綁定到一個事件的根本TextBox上。各種網站引用了這樣做的能力,但沒有一個提供相關的代碼。現在我一直在使用一個DataGridTemplateColumn,它內部有一個TextBox,但我似乎沒有能夠使用該解決方案獲得當前行。

+0

你可以在你需要獲取什麼事件更具體的,有可能比事件更優雅的解決方案,如果我們能夠知道原因。 –

+0

我想在當前特定列中的值更改爲低於某個數字後動態添加其他行。事件可能不是答案,但我不知道DataGrid是否有其他方法。我一直在嘗試在DataGridTemplateColumn中的TextBox上綁定TextChanged或LostFocus,但正如我所說的那樣無法確定該行。 –

回答

3

爲了達到這個目的,我在數據網格上使用了CellEditEnding事件。

this.TheGrid.CellEditEnding += new EventHandler<DataGridCellEditEndingEventArgs>(TheGrid_CellEditEnding); 

在該方法然後可以使用一個Dispatcher到呼叫延遲的方法,因此該值被存儲回綁定對象。

private void TheGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    Dispatcher.BeginInvoke(new Action(this.CellEdited)); 
} 

您也可以通過DataGridCellEditEndingEventArgs的方法,讓你檢查這是與底層TextBox沿着編輯的單元格的行和列。

此外,由於數據網格關注對象,行索引不太相關,因此不容易獲得(我可以找到)。

+0

當一行被刪除時它不會被觸發。 – Sam

0

您可以使用此代碼對所有單元格和行更新:

<sdk:DataGrid ItemsSource="{Binding Collection}" CellEditEnded="DataGrid_CellEditEnded" RowEditEnded="DataGrid_RowEditEnded"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn Binding="{Binding Path=Hours}" Width="Auto" /> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid>