1

我在 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 的无操作过滤器时会失败?

4

2 回答 2

0

好的,所以我遇到了完全相同的问题。就我而言,我使用的是绑定到 DataGrid 和 DataForm的DomainCollectionView 。显然,这可能会导致问题,因为两个控件都想管理货币。

解决方案是不将 DataForm 直接绑定到 DomainCollectionView,而是将其绑定到DomainCollectionView.SourceCollection属性。

这样做的缺点是您必须绑定DataGrid.SelectedItem并使DataForm.CurrentItem它们保持同步。我没有发现这种方法有任何其他问题,但它确实解决了在 DataGrid 中排序后尝试添加新项目时出现的错误。

请参阅 Jeff Handley 关于此问题的评论:http: //jeffhandley.com/archive/2011/08/02/ToolkitAugust2011.aspx

于 2015-03-19T09:31:20.207 回答
0

可能你有类似的问题http://forums.silverlight.net/p/111217/250982.aspx post

于 2011-10-27T08:02:22.353 回答