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;.
我误解了什么?
您可以在后面的代码中进行过滤,也可以使用项模板将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)