Динамическая фильтрация с помощью комбинированного списка ItemsControl - PullRequest
1 голос
/ 31 октября 2009

У меня есть ситуация, когда я хочу отобразить список объектов администрирования и поле со списком для каждого администрирования. Внутри этого поля со списком я хочу список сотрудников, принадлежащих к этой администрации, вместе с пустым параметром. Поэтому мне нужно фильтровать на основе администрирования.

До сих пор я придумал следующий код (примечание: имена объектов были переведены)

<ItemsControl x:Name="listAdministrations" ItemsSource="{Binding Path=AllAdministrations}" Margin="0,0,0,6">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" >
                <TextBox Content="{Binding Path=AdministrationName}" />

                <StackPanel Orientation="Horizontal" Margin="14,0,0,0">
                    <Label>Declares under:</Label>
                    <ComboBox DisplayMemberPath="DisplayFullName">
                        <ComboBox.ItemsSource>
                            <CompositeCollection>
                                <!-- empty option -->
                                <model:Employee DisplayFullName="-" />
                                <CollectionContainer Collection="{Binding Source={StaticResource employeeCV}}"/>
                            </CompositeCollection>
                        </ComboBox.ItemsSource>
                    </ComboBox>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Статический ресурс employeeCV - это CollectionViewSource с прикрепленным событием Filter. Но я должен как-то передать текущее администрирование в цикле ItemsControl этому событию. В привязке данных это преобразуется в {Binding Path =.} Внутри ItemsControl. Объект отправителя - мой CollectionViewSource, но он не предоставляет полезных данных.

Примерно так:

private void EmployeeAdministrationFilter( object sender, FilterEventArgs e )
    {
        Employee employee = ( Employee )e.Item;
        Administration administration; // how do I pass the administration to this filter?
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Вы можете попробовать это: http://dotnetexplorer.blog.com/2011/04/07/wpf-itemscontrol-generic-staticreal-time-filter-custom-control-presentation/

Это общий, динамический, полный XAML декларативный пользовательский элемент управления фильтрами элементов управления. Может фильтровать сетку данных, списки, выпадающие списки и т. Д. *

Надеюсь, это поможет

0 голосов
/ 31 октября 2009

Я не знаю, как сделать именно то, что вы просите, но я могу предложить альтернативный подход: создать метод расширения для вашего класса администрирования. Этот метод создает отфильтрованное представление коллекции и возвращает его. Затем вы можете привязать результат метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...