2017-10-08 59 views
0

我有靜態方法,我需要傳遞過濾collectionviewsource的值,但目前我無法這樣做。我嘗試了各種方法將其轉換爲列表,但我無法適應靜態方法。Cast Collectionviewsviews WPF中的列表

視圖模型 - 靜態方法

static public List<string> getallcrsp() 
    { 
     List<string> data = new List<string>(); 
     data.Add("TEST1"); 
     data.Add("TEST2"); 
     return data; 
    } 

視圖模型 - Collectionviewsource方法 - AllCRSP是collectionviewsource,我想這將被轉換到列表和它的值傳遞給靜態方法。

 public void Updateswlist() 
    { 

     CRmappings2 = new ObservableCollection<SPFetchCREntity>(crentities.ToList()); 
     AllCRSP = CollectionViewSource.GetDefaultView(CRmappings2); 
     SearchMU = SelectedSW.SW_Version; 
     AllCRSP.Filter = obj => 
     { 
      SPFetchCREntity entity = obj as SPFetchCREntity; 
      return obj != null && entity.SW_Version == SearchMU.ToString(); 
     }; 
     AllCRSP.Refresh(); 
     Isdrawopen = false; 
     SelectedTabIndex = 0; 
     Isselected = false; 
     Isselected = true; 
    } 
+0

@mjwills沒有,也沒有工作。 –

回答

2

如果你有SPFetchCREntityCollectionViewSource一個對象,並希望List<string>你應該這樣做:

using System.Linq; 

// 1. Get source collection of the CollectionViewSource 
IEnumerable source = AllCRSP.SourceCollection; 

// 2. Make it generic using Linq OfType<> method 
IEnumerable<SPFetchCREntity> source_typed = source.OfType<SPFetchCREntity>(); 

// 3. You can filter your list using Linq Where method 
IEnumerable<SPFetchCREntity> source_typed_filtered = source_typed.Where(obj => obj != null && entity.SW_Version == SearchMU.ToString()); 

// 4. Get string equivalent of your objects using Linq Select method 
IEnumerable<string> source_string = source_typed_filtered.Select(obj => <...something like obj.ToString()...>); 

// 5. Convert it ToList using Linq 
List<string> list = source_string.ToList(); 

或者在簡短的句子

var list = AllCRSP.SourceCollection.OfType<SPFetchCREntity>().Where(...).Select(...).ToList(); 
+1

謝謝,這對我來說是很好的學習。 :) –