У меня есть UserControl, привязанный к ICollectionView, который я реализовал для фильтрации базовой ObservableCollection.
public partial class DataStorage : UserControl
{
public ObservableCollection<CardData> dataStore;
private ICollectionView cards;
private string filter;
public string itemsInList { get; set; }
public DataStorage()
{
// Default constructor
InitializeComponent();
// Set the dataStore to be ICollectionView
dataStore = new ObservableCollection<CardData>();
// Data Add
this.AddSample();
// Set the collection source
this.cards = CollectionViewSource.GetDefaultView(dataStore);
// set the filter
this.cards.Filter = ContainsFilter;
}
// Other content here...
Когда я инициализирую UserControl, я добавляю некоторые образцы данных в ObservableCollection. Затем я устанавливаю ICollectionView в качестве представления по умолчанию для ObservableCollection и назначаю файлер.
На данный момент все работает по плану, и когда я обновляю элемент управления TextBox, он будет фильтровать образцы данных.
Если я затем снова вызову метод AddSample(), чтобы добавить больше данных в ObservableCollection, эти изменения не отразятся в пользовательском интерфейсе.
public void AddSample()
{
dataStore.Add(new CardData("tesat1", false, 1, 0));
dataStore.Add(new CardData("test2", false, 2, 0));
dataStore.Add(new CardData("test3", false, 3, 2));
dataStore.Add(new CardData("test4", false, 4, 4));
dataStore.Add(new CardData("test5", false, 5, 0));
dataStore.Add(new CardData("help", false, 1, 0));
dataStore.Add(new CardData("fish", false, 2, 0));
dataStore.Add(new CardData("cat", false, 3, 2));
dataStore.Add(new CardData("tease", false, 4, 4));
dataStore.Add(new CardData("whelp", false, 5, 0));
Выше мой метод AddSample. Я пытался переделывать представление и фильтровать каждый раз, когда добавляю больше данных.
// Set the collection source
this.cards = CollectionViewSource.GetDefaultView(dataStore);
// set the filter
this.cards.Filter = ContainsFilter;
XAML — если применимо
<TextBox x:Name="Filters" Text="{Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}" Height="55" Width="335" VerticalContentAlignment="Center" FontSize="22" />
<ListBox Height="Auto" MaxHeight="200" MinHeight="0" x:Name="CardListBox"
ItemsSource="{Binding Path=Cards}"
SelectedItem="{Binding Path=SelectedCard}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=data}" Height="50" FontSize="22" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я думаю, мне нужно добавить обработчик событий, когда базовая коллекция изменилась, но что с этим делать? Поскольку это, безусловно, тот же процесс, что и изменение коллекции, когда я вызываю AddSample().
Мои предложения или мысли приветствуются.