在对ICollectionView进行排序或筛选时,无法将新项添加到Silverlight DataForm

时间:2011-02-10 06:04:43

标签: silverlight currency dataform icollectionview

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

2 个答案:

答案 0 :(得分:0)

可能与http://forums.silverlight.net/p/111217/250982.aspx帖子

有类似的问题

答案 1 :(得分:0)

好的,我刚刚遇到了同样的问题。就我而言,我使用的是绑定到两者的 DomainCollectionView ,一个DataGrid和一个DataForm。显然,这可能会导致问题,因为两个控制都想管理货币。

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

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

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