Не удается добавить новый элемент в Silverlight DataForm, когда ICollectionView отсортирован или отфильтрован - PullRequest
1 голос
/ 10 февраля 2011

У меня есть DataForm на странице Silverlight 4. Я связываю это с Представлением на классе ниже. Я могу добавлять, удалять, редактировать и перемещаться вперед / назад по записям, используя элементы управления, встроенные в DataForm. Но как только я удаляю комментарий для Filter или SortDescription, каждый раз, когда я нажимаю кнопку «Добавить +», я получаю страшное «не могу изменить валюту, если у элемента есть ошибки проверки или он редактируется, а 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 голосов
/ 19 марта 2015

Хорошо, я столкнулся с точно такой же проблемой.В моем случае я использовал DomainCollectionView , который был связан как с DataGrid, так и с DataForm.Очевидно, это может вызвать проблемы, поскольку оба элемента управления хотят управлять валютой.

Решением было не привязывать DataForm напрямую к DomainCollectionView, а вместо этого привязывать его к свойству DomainCollectionView.SourceCollection.

Недостатком является то, что вы должны связать DataGrid.SelectedItem и DataForm.CurrentItem, чтобы синхронизировать их обоих.Я не нашел никаких других проблем с этим подходом, но он определенно решил эту проблему при попытке добавить новый элемент после сортировки в DataGrid.

См. Комментарий Джеффа Хэндли об этой проблеме: http://jeffhandley.com/archive/2011/08/02/ToolkitAugust2011.aspx

0 голосов
/ 27 октября 2011

может быть, у вас есть проблема, похожая на http://forums.silverlight.net/p/111217/250982.aspx post

...