Как мне немедленно проверить новую вставленную строку в Silverlight 3 Datagrid?

У меня есть библиотека инструментов 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 ==
    }
}

Это работает, но мне нужно, чтобы он также проверялся после добавления нового элемента. Я вижу два способа сделать это:

  1. Заставить пользователя перейти в режим редактирования для первой ячейки новой строки в сетке. (Это приведет к принудительной проверке, если они нажмут где-нибудь еще на странице.)
  2. Принудительно запускать проверки сразу после добавления новой строки (или когда сетка теряет фокус).

Мне не удалось заставить ни одно из них работать. Пробовал, но он выбирает только строку, не заставляет запускать проверки:

this._dataGrid.SelectedItem = newItem;
System.ComponentModel.IEditableObject editableItem = newItem as System.ComponentModel.IEditableObject;
if (editableItem != null)
    editableItem.BeginEdit();

Какие-либо предложения?


person Nick Gotch    schedule 03.02.2010    source источник
comment
Я пытался сделать то же самое: stackoverflow.com/questions/2131666/. У меня нет настраиваемой библиотеки, но я также создаю строку в коде.   -  person ssg31415926    schedule 05.02.2010


Ответы (1)


Только что получил эту работу благодаря некоторой помощи от этот вопрос.

Я добавил следующее в раздел «== Проверить данные здесь ==» в приведенном выше коде:

DataGridRow newRow = this._dataGrid.ChildrenOfType<DataGridRow>().FirstOrDefault();
if (newRow != null)
{
    newRow.Loaded += (sender, e) =>
    {
        this._dataGrid.CurrentItem = newItem;
        this._dataGrid.BeginEdit();
    };
}

Это заставляет первую ячейку немедленно перейти в режим редактирования.

person Nick Gotch    schedule 05.02.2010