Фильтрация ListBox

145
27 апреля 2018, 11:32

Есть ListBox и TextBox, первый подвязан под ObservableCollection<Adress>, где Adress -

public struct Adress
{
    public Adress(string text, double x, double y)
    {
        Text = text;
        X = x;
        Y = y;
    }
    public string Text  { get; set; }//Именно это свойство отображается в "ListboxItem"
    public double X     { get; set; }
    public double Y     { get; set; }
}

TextBox подвязан к свойству-строке, в сеттере которой я пробовал проводить фильтрацию, но всё тщетно. Фильтровать пробовал с помощью ICollectionView, но не разобрался как именно достичь желаемого результата.

А теперь о том, что же собой представляет желаемый результат - при вводе текста в TextBox, те элементы в ListBox'е, которые содержат этот текст(вне зависимости от регистра) - остаются видимыми, а остальные "прячутся"(думаю просто использовать Visibility.Collapsed, но тут уж все средства будут хороши). Вот не могу понять, как это реализовать не нарушая принципов MVVM.

Answer 1

В итоге разобрался сам, всему виной была моя собственная невнимательность - я не правильно указал Binding для TextBox:

<TextBox Text="{Binding AdressFilterText}"/>

Таким образом следующий код является полностью рабочим:

<TextBox Text="{Binding AdressFilterText, UpdateSourceTrigger=PropertyChanged}"/>
<ListBox ItemsSource="{Binding Adresses}"/>

И C#:

public ObservableCollection<Adress> Adresses { get; set; }
private ICollectionView _adressFilter = CollectionViewSource.GetDefaultView(Adresses);
public string AdressFilterText
{
    get => _adressFilterText;
    set
    {
        if(value != _adressFilterText)
        {
            _adressFilterText = value;
            OnPropertyChanged("AdressFilterText");
        }
        _adressFilter.Filter = o =>
        {
            if (((Adress)o).Text.ToLower().Contains(value.ToLower())) return true;
            else return false;
        };
    }
}
private string _adressFilterText;
READ ALSO
Как правильно конвертировать byte[] в строку (ASCII Рус. символы)?

Как правильно конвертировать byte[] в строку (ASCII Рус. символы)?

Например следующий код должен возвращать строку "Г":

157
Адаптив для google adsense

Адаптив для google adsense

На сайте выводится реклама adsense, но на маленьких экранах от 320px часть рекламы скрытаПодскажите, как сделать адаптив для маленьких экранов?

188
Помощь с форматированием [требует правки]

Помощь с форматированием [требует правки]

Кто может отредактировать данный код по примеру? Ошибки прикрепил к сообщению https://prntsc/ja380w https://github

182
как расположить button по середине div? Angular material

как расположить button по середине div? Angular material

text-align не работает, я в верстке не особо понимаю, но пробовал разные способы из интернета - не помогло

162