我有一个带有自定义 DataGrid 用户控件的 Silverlight 3 工具库。该网格无法直接访问 WCF RIA 服务实体类型,因此当用户在网格为空时单击网格时,我使用反射来添加新项目:
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();
有什么建议么?
刚刚得到这个工作感谢一些帮助这个问题.
我将以下内容添加到上面代码中的“==在此处验证数据==”部分:
DataGridRow newRow = this._dataGrid.ChildrenOfType<DataGridRow>().FirstOrDefault();
if (newRow != null)
{
newRow.Loaded += (sender, e) =>
{
this._dataGrid.CurrentItem = newItem;
this._dataGrid.BeginEdit();
};
}
这会强制第一个单元格立即进入编辑模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)