【问题标题】:Can't add new item to Silverlight DataForm when ICollectionView is sorted or filtered对 ICollectionView 进行排序或过滤时,无法将新项目添加到 Silverlight DataForm
【发布时间】:2011-02-10 06:04:43
【问题描述】:

我在 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的no-op过滤器时却失败了?

【问题讨论】:

    标签: silverlight currency dataform icollectionview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      查看 Jeff Handley 对此问题的评论:http://jeffhandley.com/archive/2011/08/02/ToolkitAugust2011.aspx

      【讨论】:

        猜你喜欢
        • 2018-08-08
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        相关资源
        最近更新 更多