Фильтрация CollectionViewSource только в xaml - PullRequest
0 голосов
/ 12 марта 2020

Мое текстовое поле предоставляет отфильтрованную строку в коллекцию, и когда я ввожу новое значение в текстовое поле, я хочу, чтобы моя коллекция обновлялась в соответствии с новым значением фильтра. Я хочу поместить логику фильтрации c не в моей модели или коде, а только в XAML. Код прилагается ниже. Сортировка и группировка работают нормально. Я проверил этот ответ: { ссылка }, он почти делает все, но не хватает, когда дело доходит до обновления коллекции, поэтому я создаю новый вопрос, так как не могу найти ответ.

Есть ли способ, которым я мог бы достичь этого?

   <TreeView x:Name="SystemsTreeView" ItemsSource="{Binding Source={StaticResource SystemCollection}, Path=Groups}">

     <CollectionViewSource x:Key="SystemCollection" Source="{Binding SystemsList}" Filter="{MyLogic}">   
        <!--Sorting of Systems--> 
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="SystemName"/>
            <scm:SortDescription PropertyName="Version" Direction="Descending"/>
        </CollectionViewSource.SortDescriptions>
         <!--Grouping of Systems--> 
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="SystemName" />
        </CollectionViewSource.GroupDescriptions>                
    </CollectionViewSource>

1 Ответ

0 голосов
/ 13 марта 2020

Я хочу разместить логику фильтрации c не в моей модели представления или коде позади, а только в XAML

Невозможно. Вы не можете сделать это в чистом XAML. XAML - это язык разметка . Вы должны реализовать свою логику c на языке программирования.

Чтобы получить текущие настройки, вы должны вызывать Refresh() на CollectionViewSource всякий раз, когда меняется TextBox, например, в событии TextChanged обработчик в программном коде.

Если вы хотите обновить sh фильтр из модели представления, вы должны также выполнить фактическую фильтрацию там. Например, вы можете выставить ICollectionView, к которому привязано представление. Нет смысла определять логи фильтрации c в представлении, но попробуйте обновить sh в модели представления.

...