2016-08-16 92 views
1

重複我有一個ObservableCollection<M> fooBar {get;set;}。類M.cs看起來是這樣的:WPF隱藏與CollectionViewSource

public class M{ 
    private int _ID; 
    public int ID { 
     get {return this._ID;} 
     set {this._ID = value;} 
    } 

    private string _number; 
    public int Number { 
     get {return this._number;} 
     set {this._number = value;} 
    } 

    private string _power; 
    public int Power { 
     get {return this._power;} 
     set {this._power = value;} 
    } 

    /* 
     ... 
    */ 
} 

現在我想只隱藏屬性格式Power的副本。在我的.xaml代碼我寫了這個:

<UserControl.Resources> 
    <CollectionViewSource x:Key="myCollection" Source="{Binding Path=fooBar}"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="Power"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
</UserControl.Resources> 

我這個集合綁定到我的ComboBox

<ComboBox Name="cbValues" 
    ItemsSource="{Binding Source={StaticResource myCollection}}" 
    DisplayMemberPath="{Binding Power}" 
    SelectedValuePath="{Binding Power}" 
    /> 

ComboBox填寫正確的值,但仍有重複。我怎樣才能隱藏它們?

+1

填寫資料的收集 – Eldho

+0

儘可能避免重複數據WPF Combobox中的[Distinct Values]的副本(http://stackoverflow.com/questions/5995989/distinct-values-in-wpf-combobox) –

+0

@Eldho不同的機器可以擁有相同的電源。 – MyNewName

回答

1

你可以嘗試CollectionViewSource.Filter

myCollection.Filter+= new FilterEventHandler(ShowOnlyDistinctFilter); 

此事件處理程序使用過濾和顯示相關的數據源

private void ShowOnlyDistinctFilter(object sender, FilterEventArgs e) 
{ 
    var item= e.Item as M; 
    if (item != null) 
    { 
     //Your distinct logic here 
    } 
} 
+0

謝謝你的回答!我還有一個問題。顯示的屬性基於另一個「ComboBox」。因此,該屬性可以是「Power」,「ID」或「Number」。你能解釋一下你的代碼嗎? – MyNewName