在ComboBox中显示依赖于属性的项目

Em1*_*Em1 2 wpf binding combobox

我有一个绑定到的组合框List<Person>(ItemsSource在CodeBehind中设置).

<ComboBox Width="120" Background="White" DisplayMemberPath="Name" />

因此,所有人的姓名都被添加到列表中.

因为没有必要在ComboBox中显示每个名称,所以我添加了一个Hide类型的属性bool.如果此属性设置为true,则名称不应显示在组合框中.

但是如何在组合框的绑定中添加一个条件,以便只列出那些不应该被隐藏的人.

编辑:关于答案,我添加了以下代码:

{
    List<Person> persons;
    ...
    var collectionView = CollectionViewSource.GetDefaultView(persons);
    collectionView.Filter = HideFilter;
}

...

private bool HideFilter(object item)
{
   Person p = item as Person;
   return p.Hide;
}
Run Code Online (Sandbox Code Playgroud)

但是这会抛出一个TargetInvocationException collectionView.Filter = HideFilter;.
我误解了什么?

see*_*kle 5

您可以在后面的代码中进行过滤,也可以使用项模板将Item的可见性绑定到isHiden属性(使用boolean to visilbility转换器).您的XAML代码将是:

     <ComboBox Grid.Column="1" Grid.Row="0" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Visibility="{Binding IsVisible}" Text="{Binding Name}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>


public class person
{
    public person(string n, Visibility v)
    {
        Name = n;
        IsVisible = v;
    }
    public string Name {get;set;}
    public Visibility IsVisible { get; set; }
}
Run Code Online (Sandbox Code Playgroud)