【问题标题】:XAML/Silverlight: Passing a collection (e.g. ListBox.SelectedItems) to a DomainService methodXAML/Silverlight:将集合(例如 ListBox.SelectedItems)传递给 DomainService 方法
【发布时间】:2010-09-21 20:04:18
【问题描述】:

我需要将一组值传递给 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 参数作为参数传递给服务方法,或者我可以使服务方法成为非元的,让它返回所有内容,并将 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>

它抛出“Operator 'IsContainedIn' 与操作数类型 'String' 和 'ObservableCollection`1' 不兼容 ---> System.ArgumentNullException: Value cannot be null。”

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

【问题讨论】:

    标签: .net silverlight xaml silverlight-4.0 domainservices


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 2018-07-14
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2014-01-26
      相关资源
      最近更新 更多