XAML / Silverlight:将集合(例如ListBox.SelectedItems)传递给DomainService方法

时间:2010-09-21 20:04:19

标签: .net silverlight xaml silverlight-4.0 domainservices

我需要将一组值传递给DomainService方法。这就是我想要的服务方法:

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中,我可以通过QueryParameters / QueryParameter将DOB参数作为参数传递给服务方法,或者我可以使服务方法为nonary,让它返回所有内容,并将DOB参数粘贴在FilterDescriptor中。两者都有效(有一点需要注意:我无法弄清楚如何使FilterDescriptor XAML的IgnoredValue属性与null 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'不兼容---&gt; System.ArgumentNullException:值不能为空。”

我应该放弃并且只是定义客户端C#代码,将选定的列表框值填充到带分隔符的字符串中,或​​类似的东西?我试图在这里推销声明性的东西,但它必须在某个地方有限制。

1 个答案:

答案 0 :(得分:1)

这就是说IsContainedIn需要一串逗号分隔的值而不是一个对象。

看一下使用String.Join创建字符串然后绑定到该字符串。您仍然可以将其作为页面上的属性。