3
我有一個自定義DataGrid用戶控件的Silverlight 3工具庫。此網格沒有直達WCF RIA服務實體類型,所以我使用反射來添加新項,當用戶點擊時,它的空電網:如何立即驗證Silverlight 3 Datagrid中新插入的行?
private void InsertEmptyRecord()
{
if (this._dataGrid.ItemsSource == null)
return;
Type[] typeParameters = this._dataGrid.ItemsSource.GetType().GetGenericArguments();
if (typeParameters.Count() > 0)
{
Type itemType = typeParameters[0];
object newItem = System.Activator.CreateInstance(itemType);
Type sourceType = typeof(System.Windows.Ria.EntityCollection<>);
Type genericType = sourceType.MakeGenericType(itemType);
System.Reflection.MethodInfo addMethod = genericType.GetMethod("Add");
addMethod.Invoke(this._dataGrid.ItemsSource, new object[] { newItem });
// == Validate data here ==
}
}
這工作,但我需要它新項目添加後也會生效。有兩種方法我可以看到這樣做:
- 強制用戶進入編輯模式 新行的 網格中的第一個單元格。 (這將迫使 驗證,如果他們點擊任何地方 其他頁面上。)
- 強制驗證 運行時立即將新行 添加(或當電網失去 焦點。)
我還沒有能夠讓這兩個工作。嘗試過,但它只選擇行,不強制驗證運行:
this._dataGrid.SelectedItem = newItem;
System.ComponentModel.IEditableObject editableItem = newItem as System.ComponentModel.IEditableObject;
if (editableItem != null)
editableItem.BeginEdit();
有什麼建議嗎?
我一直在嘗試做類似的事情:http://stackoverflow.com/questions/2131666/how-can-i-put-a-silverlight-3-datagridcell-into-edit-mode-in-碼。我沒有自定義庫,但我也在代碼中創建該行。 – ssg31415926 2010-02-05 17:12:32