我在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的无操作过滤器时失败?
答案 0 :(得分:0)
答案 1 :(得分:0)
好的,我刚刚遇到了同样的问题。就我而言,我使用的是绑定到两者的 DomainCollectionView ,一个DataGrid和一个DataForm。显然,这可能会导致问题,因为两个控制都想管理货币。
解决方案是不将DataForm直接绑定到DomainCollectionView,而是将其绑定到DomainCollectionView.SourceCollection
属性。
这样做的缺点是你必须绑定DataGrid.SelectedItem
和DataForm.CurrentItem
才能使它们保持同步。我没有发现这种方法的任何其他问题,但它确实解决了在DataGrid中排序后尝试添加新项目时的错误。
请参阅Jeff Handley关于此问题的评论:http://jeffhandley.com/archive/2011/08/02/ToolkitAugust2011.aspx