我已将ObservableCollection绑定到DataGrid。当我更改DataGrid中的值时,会引发RowEditEnding事件。但是e.Row.Item是编辑前的对象,因此您看不到新值。据我所知,因为EditEnding。在Silverlight中,您有一个EditEnded事件,当我编辑DataGrid时,如何使用新值获取对象。
感谢,
菲利普
答案 0 :(得分:9)
从http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c38fc695-d1ec-4252-87b7-feb484ee01e4/,将Binding的UpdateSourceTrigger更改为PropertyChanged。然后,在RowEditEnding事件之前立即更新该属性,并且可以从RowEditEnding事件处理程序访问新值。
例如,对于DataGridComboBoxColumn
SelectedItemBinding="{Binding ForTestResult, UpdateSourceTrigger=PropertyChanged}"
这似乎是解决此问题的一种非常简单的方法。
此外,虽然我还没有尝试过,但我认为如果您的对象实现了IEditableObject,那么在编辑之前也应该很容易访问原始值。
答案 1 :(得分:6)
嗯,也许这可能会有所帮助:http://wpf.codeplex.com/Thread/View.aspx?ThreadId=39356
http://blogs.msdn.com/b/vinsibal/archive/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid.aspx
或者,请参阅第5点。
你必须修补它以获得你想要的东西,但我希望有所帮助!或者指出你的方向很好。
答案 2 :(得分:1)
这个解决方案似乎很简单。参考msdn forum。
private void dgEmployees_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
Action action = delegate
{
Employee emp = e.Row.Item as Employee;
//do something nice to the employee
};
Dispatcher.BeginInvoke(action, System.Windows.Threading.DispatcherPriority.Background);
}
答案 3 :(得分:0)
附加到ObservableCollection的已更改事件。
我绑定到DataTable并使用了RowChanged事件。
答案 4 :(得分:0)
我最新的和IMHO最快的方法是添加bool rowEdited=false
,然后在true
内将其设置为DataGrid_RowEditEnding
,并将{editEnded'的代码放在DataGrid_LayoutUpdated
内:
if (rowEdited)
{
//main code here//
rowEdited=false;
}