2010-01-28 48 views
16

我在綁定到C#ViewModel類中的Department對象的ObservableCollection的WPF應用程序中有一個ComboBox。我想用組合框按部門過濾另一個集合(事實上它現在可以工作)問題是我想在列表頂部添加一個附加選項「全部」。有沒有一個正確的方法來做到這一點。假冒部門在很多方面都感覺不對。如何將通用項添加到綁定到WPF集合的ComboBox中

組合框

<ComboBox ItemsSource="{Binding Path=Departments}" 
      SelectedValue="{Binding Path=DepartmentToShow , Mode=TwoWay}" /> 

回答

22

你可以使用一個CompositeCollection作爲的ItemsSource組合框,包括「全部」選項。您需要將CollectionContainer的Collection屬性設置爲「ObservableCollection of Department對象」。

<ComboBox > 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
      <ComboBoxItem>All</ComboBoxItem> 
      <CollectionContainer x:Name="departmentCollection"/> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

不知道這將是適合你的。然而過濾的情況...

+1

+1作爲一名經驗豐富的WPF程序員,我甚至都不知道「CompositeCollection」!搜索互聯網時有各種解決方法,但沒有提到這一點!難以置信... – 2010-01-28 07:11:37

+0

是的,當我讀到這個我很驚訝。我今天早上一直在做一些研究,我認爲它會做到這一點。現在過濾是在Linq查詢的構建中完成的,所以我想我可以測試'All',如果沒有選擇迭代peopleCollection。在將來,我計劃重構並使用CollectionViewSource過濾視圖而不需要重新查詢;我不確定那將如何工作,但對於這個問題,我有我的答案。謝謝! – 2010-01-28 16:01:13

+1

@Aviad是的,這是一個不錯的解決方案,有一點吸吮是因爲CompositeCollection不是Freezable,因此無法通過DataContext綁定到Collection屬性。這可以通過綁定到靜態資源來解決...... – 2010-01-28 19:59:19

0

假設你有一個名爲MyCombo的ComboBox,命名MyEntity與DomaineService相關聯的實體命名MyDomainService

不要忘記

using System.ServiceModel.DomainServices.Client; 

和使用與您的實體的Web站點和的DomainService

運作良好,當然你叫一個名爲PROC:在

void LoadEntities() 
{ 
    MyDomainService_Context = new MyDomainService(); 
    EntityQuery<MyEntity > mQuery = null; 

    mQuery = from q in _Context.GetMyDomainServiceQuery() 
      select q; 

    LoadOperation<MyEntity > loadOpLoadEntities = _Context.Load(mQuery, LoadOpLoadEntitiesCallBack, null); 
} 

然後CallBack功能:

void LoadOpLoadEntitiesCallBack(LoadOperation<MyEntity> loadOperation) 
{ 
    if (loadOperation.Entities.Count() > 0) 
    { 
     List<MyEntity> mList = new List<MyEntity>(); 
     MyEntity mE = new MyEntity(); 
     mE.Column1 = -1; 
     mE.Column2 = "Default value"; 
     mList.Add(mE); 

     for (int i = 0; i < loadOperation.Entities.Count(); i++) 
     { 
      mList.Add(loadOperation.Entities.ToList()[i]); 
     } 

     this.MyCombo.ItemsSource = mList.ToList(); 
    } 
} 
+0

這是一個使用Linq to SQL的MVVM WPF應用程序。複合COllection解決方案一直工作相當好幾年,但感謝額外的投入。 – 2013-04-12 16:43:56

相關問題