XAML / Silverlight: передача коллекции (например, ListBox.SelectedItems) в метод DomainService - PullRequest
0 голосов
/ 22 сентября 2010

Мне нужно передать набор значений в метод DomainService.Вот как мне бы хотелось, чтобы метод service выглядел следующим образом:

IQueryable<Person> GetPeople( Nullable<DateTime> MinDOB, IList<String> Ethnicities )
{
    return
        from
            Person item in ObjectContext.People
        where
            item.DOB >= MinDOB
            && Ethnicities.Contains( item.ETHNICITY )
        select
            item;
}

Запрос работает без параметров, и только с параметром DOB он работает нормально.В XAML я могу передать параметр DOB через QueryParameters / QueryParameter в качестве параметра к методу сервиса, или, в качестве альтернативы, я могу сделать метод сервиса ненарным, заставить его возвращать все и вставить параметр DOB в FilterDescriptor.Оба работают (с одной оговоркой: я не могу понять, как заставить атрибут IgnoredValue XAML FilterDescriptor работать с нулевым DateTime).Все идет нормально.Но даты скалярные, а ListBox.SelectedItems - нет.

Я продолжаю получать сообщение об ошибке «должен быть одним из предопределенных сериализуемых типов» в методе службы, как определено что-то подобное выше (где, в любом случае, есть список этих запрещенных типов алого цвета в MSDN?), Иследующее также не работает:

<ria:DomainDataSource.FilterDescriptors>
    <ria:FilterDescriptor PropertyPath="ETHNICITY" Operator="IsContainedIn" Value="{Binding ElementName=_lbEthnicities, Path=SelectedItems}" />
</ria:DomainDataSource.FilterDescriptors>

Выдает «Оператор IsContainedIn», несовместимый с типами операндов «String» и «ObservableCollection`1 '---> System.ArgumentNullException: значение не может быть нулевым."

Должен ли я отказаться и просто определить клиентский код C #, чтобы вставить выбранные значения списка в строку с разделителями или что-то в этом роде?Я пытаюсь выдвинуть здесь декларативную вещь, насколько это возможно, но где-то должен быть предел.

1 Ответ

1 голос
/ 18 февраля 2011

То, что это говорит, - то, что IsContainedIn требует строку значений, разделенных запятыми, а не объекта.

Взгляните на использование String.Join для создания строки, а затем привяжите ее.Вы все еще могли бы иметь это как собственность на своей странице.

...