2016-08-16 4 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}" 
    /> 

The ComboBox есть ли заполнена правильные значения, но все еще дубликаты. Как я могу скрыть их?

+1

избежать дублирования при заполнении данных в коллекции – Eldho

+0

Возможная дубликат [Значимые значения в комбинате WPF] (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

Смежные вопросы