【问题标题】:Dynamic filtering with an ItemsControl combobox使用 ItemsControl 组合框进行动态过滤
【发布时间】:2009-10-30 22:27:12
【问题描述】:

我有这种情况,我想显示管理对象列表和每个管理的ComboBox。在这个ComboBox 中,我想要一个包含属于这个管理部门的员工的列表,以及一个空选项。所以我需要根据 Administration 进行过滤。

到目前为止,我已经想出了以下代码(注意:对象名称已被翻译)

<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。但我必须以某种方式将 ItemsControl 循环中的当前管理传递给此事件。在数据绑定中,这将转换为ItemsControl 中的{Binding Path=.}。发件人对象是我的CollectionViewSource,但这并没有提供有用的数据。

类似这样的:

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

【问题讨论】:

    标签: c# .net wpf data-binding


    【解决方案1】:

    我不知道如何完全按照您的要求做,但我可以建议另一种方法:为您的 Administration 类创建一个扩展方法。此方法创建一个过滤的集合视图并返回它。然后,您可以绑定到该方法的结果。

    【讨论】:

    • Antonmarkov,你的意思是这样的:(伪代码)公共类管理 { public CollectionViewSource CollectionViewSource { get;私人套装; } 公共管理() { CollectionViewSource = 新的 CollectionViewSource(); CollectionViewSource.Filter += EmployeeAdministrationFilter; } private void EmployeeAdministrationFilter( object sender, FilterEventArgs e ) { // 过滤东西 // this = Administration } }
    • 是的,如果您可以修改Administration,那么您可以直接添加该属性。不过,您可能应该使用普通的 CollectionView 而不是 CollectionViewSource。 CollectionViewSource 是用于 XAML 的标记扩展。
    【解决方案2】:

    您可能想尝试一下:http://dotnetexplorer.blog.com/2011/04/07/wpf-itemscontrol-generic-staticreal-time-filter-custom-control-presentation/

    这是一个通用的、动态的、完整的 XAML 声明性项目控件过滤器用户控件。可以过滤datagrid、listbox、combobox等...

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2021-07-14
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多