第一点:很抱歉我的英语不好,这不是我的第一语言。我目前正在做一个项目,我有一个人的列表,我想在一个组合框中列出。我想组合框得到过滤,这样就只有我搜索的人列出了。例如,如果我在组合框中输入“约翰”,应该只有像“约翰”,“约翰”,...这样以“约翰”开头的人。接下来的事情是,我的组合框不是“可编辑”的,我怎么能让它让我可以在里面写呢?目前它是“锁定”的...我希望你明白我的问题是什么,以及如何解决它!
nbewdwxp1#
所以WPF最酷的一点就是它允许绑定。具体来说,就是将代码中的属性绑定到UI中的控件。所以要有一个过滤的组合框,我会将一个列表中的任何对象绑定到组合框,如下所示:C#:
private List<Person> myList = new List<Person>(); public List<Person> MyList { get { return myList; } set { myList = value; } }
WPF:
<ComboBox Name="cboObjects" ItemsSource="{Binding MyList}"/>
这就把你的组合框绑定到了一个列表上。所以现在我们必须过滤它。所以接下来我会使用KeyDown事件在每次输入组合框时触发。然后在该事件中你可以捕获用户的文本,并试图在列表中找到匹配的内容,然后将列表属性设置为等于找到的内容。
private void cboObjects_KeyDown(object sender, KeyEventArgs e) { string temp = ((ComboBox)sender).Text; var newList = MyList.Where(x => x.Name.Contains(temp)); MyList = newList.ToList(); }
现在您的人员对象列表已经被过滤了!尽管这样做会有一些问题,比如您现在不再拥有原始列表。另一件事是,如果您采用这种方法,你的UI将不会更新,除非它被告知。2所以使用INotifyPropertyChanged接口。它实际上会在您更新属性时触发一个事件,然后通知UI再次检索该值。最后,对于不可编辑的组合框,尝试设置IsReadOnly = false,IsEditable = true!
ktca8awb2#
这其实是内置的!您需要做的是在ComboBox控件上设置以下属性。
ComboBox
<ComboBox ItemsSource="{Binding PersonList}" IsTextSearchEnabled="True" TextSearch.TextPath="Name"/>
这个范例假设您有Person型别的PersonList,其中Person型别有Name属性。您需要将TextSearch.TextPath设置为要搜索的任何属性(基于ItemsSource集合中项目的属性)。更多信息,请参阅https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.combobox.istextsearchenabled
Person
PersonList
Name
TextSearch.TextPath
ItemsSource
2条答案
按热度按时间nbewdwxp1#
所以WPF最酷的一点就是它允许绑定。具体来说,就是将代码中的属性绑定到UI中的控件。所以要有一个过滤的组合框,我会将一个列表中的任何对象绑定到组合框,如下所示:
C#:
WPF:
这就把你的组合框绑定到了一个列表上。所以现在我们必须过滤它。所以接下来我会使用KeyDown事件在每次输入组合框时触发。然后在该事件中你可以捕获用户的文本,并试图在列表中找到匹配的内容,然后将列表属性设置为等于找到的内容。
现在您的人员对象列表已经被过滤了!尽管这样做会有一些问题,比如您现在不再拥有原始列表。另一件事是,如果您采用这种方法,你的UI将不会更新,除非它被告知。2所以使用INotifyPropertyChanged接口。它实际上会在您更新属性时触发一个事件,然后通知UI再次检索该值。
最后,对于不可编辑的组合框,尝试设置IsReadOnly = false,IsEditable = true!
ktca8awb2#
这其实是内置的!
您需要做的是在
ComboBox
控件上设置以下属性。这个范例假设您有
Person
型别的PersonList
,其中Person
型别有Name
属性。您需要将
TextSearch.TextPath
设置为要搜索的任何属性(基于ItemsSource
集合中项目的属性)。更多信息,请参阅https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.combobox.istextsearchenabled