CLSA AddChild Значения по умолчанию - PullRequest
0 голосов
/ 17 сентября 2018

Я использую последний выпуск CSLA и пытаюсь добавить в коллекцию строку с элементами по умолчанию.Я заметил, что конструктор по умолчанию класса Foo вызывается вместо AddNewCore в классе FooList.Я не могу получить методы AddNewCore или Child_Create для вызова при добавлении новой строки в строку XamDataGrid.(Строка добавлена, но она из конструктора по умолчанию класса FooLine - то есть без значений по умолчанию и без атрибута MarkAsChild.) Вот фрагмент кода, который находится в классе FooList:

    protected override FooItem AddNewCore()
    {
        var item = DataPortal.CreateChild<FooItem>();
        MarkAsChild();
        Add(item);
        return base.AddNewCore();
    }

    protected override void Child_Create()
    {
        var item = DataPortal.CreateChild<FooItem>();
        MarkAsChild();
        Add(item);
        base.Child_Create();
    }

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Метод AddNewCore () существует в клиентском CSLA-классе «ExtendedBindingList» с типом возврата «void», и такой же метод существует в серверном классе «ObservableBindingList» с типом возврата «ListClass».Таким образом, мы требовали вызывать метод на стороне клиента на стороне сервера.Пожалуйста, смотрите ниже код для того же.

    #if SILVERLIGHT
    protected override void AddNewCore()
    {
        var item = DataPortal.CreateChild<FooItem>();
        Add(item);
    }
    #endif
0 голосов
/ 19 сентября 2018

Для справки: причина, по которой вышеприведенный код не работает, связана с тем, как WPF вызывает метод New. Как правило, в других средах можно подключиться к этому событию, перехватить его и вернуться с данными по умолчанию. В WPF необходимо проверять события триггера RecordAdding или RecordAdded и обрабатывать вызовы вручную.

В моем случае WPF будет выглядеть так:

  <i:Interaction.Triggers>' 
       i:EventTrigger EventName="RecordAdded">
       <ei:CallMethodAction TargetObject="{Binding}" 
       MethodName="CreateDefaultAddressValuesCommand" />
  </i:EventTrigger>

По виду модель:

    var idx = FooInformation.FooAddressList.Count - 1;
    var address = await FooAddress.CreateAsync();            
    FooListing.FooAddressList[idx] = address;
...