У меня есть библиотека инструментов Silverlight 3 с пользовательским элементом управления DataGrid. Эта сетка не имеет прямого доступа к типам объектов WCF RIA Services, поэтому я использую отражение, чтобы добавить новый элемент, когда пользователь нажимает на сетку, когда она пуста:
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();
Есть предложения?