reflection - 如何立即验证Silverlight 3 Datagrid中新插入的行?

标签 reflection silverlight-3.0 datagrid c#-3.0 wcf-ria-services

我有一个带有自定义DataGrid用户控件的Silverlight 3工具库。该网格无法直接访问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();


有什么建议?

最佳答案

this question的帮助下,这项工作才得以完成。

我从上面的代码中将以下内容添加到“ == Validate data here ==”部分中:

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


这将强制第一个单元格立即进入编辑模式。

关于reflection - 如何立即验证Silverlight 3 Datagrid中新插入的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195938/

相关文章:

php - 不打印网格线

java - 从内部类访问它的私有(private)构造函数时,反射返回两个构造函数

c# - 我需要获取特定对象的属性值,但不知道对象的类型

c# - Silverlight 3.0 中的通用 XML 解析器

c# - 域服务与 WCF 服务?

silverlight - 将 silverlight 4 应用程序降级到 silverlight 3 的问题/步骤

wpf - 添加项目时如何更新数据网格排序(使用 MVVM 且无代码隐藏)

c# - 有没有办法判断方法是事件访问器还是属性访问器?

scala - 使用 scala Type 设置类型参数(通过 TypeTag?)

C# WPF DataGrid ScrollIntoView 无法使用触摸