2014-03-20 3 views
2

я после этой ссылке здесь: http://jacobmsaylor.com/?p=1270Фильтрация ObserverableCollection отображать только определенные элементы

, но у меня возникают проблемы, связанные с ним, пытаясь сделать щипки к нему

<ListBox Name="PageList_ListBox" MouseDoubleClick="PageList_ListBox_OnMouseDoubleClick" 
          Background="#FFC9C9C9" Margin="0,5,0,0" ItemsSource="{Binding PageCollection, ElementName=This}"> 

.

объекта
public static ObservableCollection<MLBPage> _PageCollection = new ObservableCollection<MLBPage>(); 
public static ObservableCollection<MLBPage> PageCollection 
     { 
      get { return _PageCollection; } 
     } 

public ICollectionView _PageCollectionView { get; set; } 

_PageCollectionView = CollectionViewSource.GetDefaultView(_PageCollection); 

private bool FilterLeadersList(object item) 
{ 
    MLBPage page = item as MLBPage; 
    if (page.templateName.Contains("Leaders List")) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 

Моего MLBPage имеет 2 типа ... где «TemplateName» может быть либо «Лидеры списка» или «Лидер хэдшотов» .. теперь, когда я фильтровать коллекцию, добавив к кнопке:

_PageCollectionView.Filter = FilterLeadersList; 

вся коллекция просто фильтры (_PageCollection переплетены в ListBox оказывается пустым), а не только те элементы, которые содержат «Список лидеров» в имени ....

любая помощь в том, как я могу изменить это Работа?

+0

к первому парню, который помог мне так много и удаляемого ваш ответ .. перепечатывать его и я буду дайте вам кредит. Это я был виноват. ваш код, вероятно, работал, я просто испортился, так как мне нужно было сравнить templateType, а не templateName – user1189352

ответ

3

изменить код в:

private ObservableCollection<MLBPage> _PageCollection = new ObservableCollection<MLBPage>();    
public ICollectionView _PageCollectionView { get; set; } 

просто сделать это один раз (например, в пределах CTOR.)

//ctor 
_PageCollectionView = CollectionViewSource.GetDefaultView(_PageCollection); 
_PageCollectionView.Filter = FilterLeadersList, 

использование ясно, добавлять, удалять, чтобы изменить ваш _PageCollection.

связать ваш ListBox с вашей точки зрения

<ListBox ItemsSource="{Binding _PageCollectionView}"/> 

использование Обновить, чтобы обновить свой фильтр

_PageCollectionView.Refresh(); 
+0

Кстати, ваша оригинальная привязка не работает, потому что _PageCollection не является общедоступной. PROPERTY – blindmeis

+0

рассмотрит это прямо сейчас. – user1189352

+0

blindmeis отредактировал OP. просто не хотел загромождать его слишком много, чтобы люди действительно читали сообщение = [ – user1189352

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