Как установить начальные значения при использовании Silverlight DataForm и .Net RIA Services DomainDataSource? - PullRequest
1 голос
/ 16 сентября 2009

Я экспериментирую с .Net RIA и Silverlight, у меня есть несколько связанных сущностей; Клиент, проект и работа, у клиента много проектов, а у проекта много рабочих мест.

В приложении Silverlight я использую элементы управления DomainDataSource и DataForm для выполнения операций CRUD. Когда клиент выбран, появляется список проектов, после чего пользователь может добавить новый проект для этого клиента. Я хотел бы иметь возможность заполнить значение для клиента автоматически, но, похоже, нет никакого способа сделать это, хотя в элементе управления DataForm есть событие AddingNewItem, оно, похоже, срабатывает до того, как DataForm имеет экземпляр нового объекта, и я не уверен, что лучший способ сделать это - это пройти через ChangeSet из события DomainDataSource SubmittingChanges.

Я бы подумал, что это была бы очевидная особенность ... кто-нибудь знает лучший способ добиться этой функциональности?

Ответы [ 4 ]

1 голос
/ 30 апреля 2010

Ну, опоздав на вечеринку, но столкнувшись с той же проблемой, я применил обходной путь, используя конвертер значений:

public class MissingDateTimeValueConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (value is DateTime && (DateTime)value == DateTime.MinValue) {
            DateTime returnValue = DateTime.Now.Date;
            int addDays;
            if (!string.IsNullOrEmpty(parameter as string) && int.TryParse(parameter as string, out addDays)) {
                returnValue = returnValue.AddDays(addDays);
            }
            return returnValue;
        } else {
            return value;   
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        return value;            
    }

}

Преобразует отсутствующие значения даты (например, 01.01.0001) в сегодняшнюю дату и позволяет добавлять / вычитать дни, используя параметр parameter.

1 голос
/ 27 января 2011

Чтобы установить значения по умолчанию при создании моей сущности, я добавил класс с именем [EntityName] .shared.cs. Затем я использовал технику, записанную по этой ссылке . Это хорошо сработало для меня.

1 голос
/ 07 октября 2009

Что обычно делается, так это наличие экрана, который содержит DataGrid, показывающий существующие данные. Тогда есть кнопка Добавить, которая будет:

  1. Создать новый предмет
  2. Создать ChildWindow, передав новый элемент конструктору ChildWindow
  3. Имейте DataForm внутри ChildWindow, привязанного к указанному элементу
0 голосов
/ 08 февраля 2013

Это решение позволяет добавить новый элемент в конец коллекции. Коллекция привязана к DataForm. Перед выходом из текущего обработчика установите DataForm.CurrentIndex в качестве последнего элемента в коллекции, затем отмените процедуру добавления. Новый элемент инициализируется / добавляется и отображается в форме данных, готовой к редактированию.

private void ResolutionDataForm_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
    {
        // add a new iten in collection
        Resolution resolution = new Resolution() { FaultName = "test" };
        context.Resolutions.Add(resolution);
        //through binding the form gets updated
        ResolutionDataForm.CurrentIndex = context.Resolutions.Count-1;

        // cancel de current adding procedure
        e.Cancel = true;

    }
...