我在 Silverlight 4 页面上有一个 DataForm。我将它绑定到下面类的视图。我可以使用 DataForm 中内置的控件添加、删除、编辑和向前/向后移动记录。但是,一旦我删除了 Filter 或 SortDescription 的注释,那么每次我按下 Add + 按钮时,我都会收到可怕的“当项目有验证错误或正在编辑且 AutoCommit 为 false 时无法更改货币”错误。我已经坚持了好几个小时了,一点头绪都没有。
public class TestData {
OperationsDataContext context;
ICollectionView view;
public ICollectionView View { get { return view; } }
public IEditableCollectionView EditableView { get { return ((IEditableCollectionView)view); } }
public TestData() {
context = new OperationsDataContext();
context.Locations.Add(new Location { LocationId = 1, LocationName = "Home", CreatorUserId = 1 });
context.Locations.Add(new Location { LocationId = 2, LocationName = "Work", CreatorUserId = 1 });
context.Locations.Add(new Location { LocationId = 3, LocationName = "Office", CreatorUserId = 1 });
view = ((ICollectionViewFactory)context.Locations).CreateView();
// View.Filter = (o) => true;
// View.SortDescriptions.Add(new SortDescription("LocationName", ListSortDirection.Ascending));
}
}
我尝试使用代码手动添加数据 - 而不是 DataForm - 即使同时指定了过滤器和排序,它也能正常工作。
TestData testData = new TestData();
Location item = testData.EditableView.AddNew() as Location;
testData.EditableView.CommitNew();
为什么它可以通过代码而不是通过 DataForm 工作?为什么 DataForm 在没有指定过滤器时可以工作,但在指定始终返回 true 的无操作过滤器时会失败?