2010-09-21 58 views
0

我需要將一組值傳遞給DomainService方法。以下是我想要的服務方法的樣子:XAML/Silverlight:將集合(例如ListBox.SelectedItems)傳遞給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參數作爲參數傳遞給service方法,或者我可以使service方法爲nonary,讓它返回所有內容,並將DOB參數粘貼到FilterDescriptor中。這兩個工作(一個警告:我無法弄清楚如何使FilterDescriptor XAML的IgnoredValue屬性工作與一個空的DateTime)。到現在爲止還挺好。但日期是標量,ListBox.SelectedItems不是。

我不斷收到服務方法中的「必須是預定義的可序列化類型之一」的錯誤,就像上面定義的那樣(MSDN中的那些禁止猩紅類型的列表,不管怎麼樣?),以下代碼不會「T工作,要麼:

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

它拋出‘操作員「IsContainedIn字符串‘和‘ObservableCollection`1’與操作數類型不兼容’---> System.ArgumentNullException:值不能爲空。’

我是否應該放棄並定義客戶端C#代碼來將選定的列表框值填充到帶有分隔符的字符串中?我試圖將聲明式的東西推到這裏,但是這裏有一個限制。

回答

1

這就是說,IsContainedIn需要一串逗號分隔值而不是對象。

看看使用String.Join創建字符串,然後綁定到該字符串。您仍然可以將其作爲您網頁上的某個媒體資源。

+0

由Jove,這應該工作。謝謝! – 2011-02-19 04:11:25