Форма CustomersView отображает в TreeView результаты запроса к таблице Customers. TreeView имеет 2 уровня группировки (по странам и по городам) и форму быстрой фильтрации. Результат запроса возвращается в виде перечисления элементов CountryCustomersTreeItem, имеющих вложенные коллекции:

Pic9

How use.

CustomersView.xaml
...
    <bsFilter:FilterControl Key="Country"
                          ParentCollection="{TemplateBinding ItemsSource}">
    <bsFilter:FilterControl.FilterInitializersManager>
        <bsFilter:FilterInitializersManager>
            <vm:CustomersTreeFilterInitializer />
        </bsFilter:FilterInitializersManager>
    </bsFilter:FilterControl.FilterInitializersManager>
</bsFilter:FilterControl>
...

How work.

FilterControl, включенный в состав шаблона, служит для фильтрации как в исходной коллекции, возвращенной запросом, так и во вложенных коллекциях (свойства CountryCustomersTreeItem.Cities и CityCustomersTreeItem.Customer). Для управления исходной и вложенными коллекциями создается три класса фильтров – CountriesTreeFilter, CitiesTreeFilter и CustomersTreeFilter – по одному на каждый уровень фильтрации. Моделью представления фильтра является экземпляр класса CountriesTreeFilter. При подключении коллекции CountriesTreeFilter выполняет перечисление экземпляров CountryCustomersTreeItem и формирует фильтры для каждой коллекции элементов CityCustomersTreeItem, переданной в свойстве Cities. Ссылки на полученные фильтры сохраняются для передачи условий фильтра и формирования функции фильтрации IsMatch. Аналогичная работа производится на уровне экземпляров фильтра CitiesTreeFilter.

How look.

Pic10

Заключение.

Last edited Nov 8, 2013 at 7:25 PM by Mishkin, version 6