C# 是否在Windows Phone 8.1上创建下拉列表框?
我是应用程序开发新手,所以我只是想说,我对C#也没有太多经验。所以请简单一点 我需要创建一个带有文本框的下拉列表。就像输入字母一样,下拉列表将显示列表中最可能出现的单词。C# 是否在Windows Phone 8.1上创建下拉列表框?,c#,xaml,windows-phone-8.1,windows-applications,dropdownbox,C#,Xaml,Windows Phone 8.1,Windows Applications,Dropdownbox,我是应用程序开发新手,所以我只是想说,我对C#也没有太多经验。所以请简单一点 我需要创建一个带有文本框的下拉列表。就像输入字母一样,下拉列表将显示列表中最可能出现的单词。 而且每次输入信件时,列表都会不断更新。我建议您不要使用带有文本框的下拉列表。这是一种桌面控件。对于移动用户来说,使用这种控件并不友好 因为当你打字时,键盘会隐藏60%的屏幕。然后,在键入1个字母后,必须按back键隐藏键盘。然后查看结果,再添加1个字母。。大量的用户交互不会让你的用户满意 Windows phone通常会对以下
而且每次输入信件时,列表都会不断更新。我建议您不要使用带有文本框的下拉列表。这是一种桌面控件。对于移动用户来说,使用这种控件并不友好 因为当你打字时,键盘会隐藏60%的屏幕。然后,在键入1个字母后,必须按back键隐藏键盘。然后查看结果,再添加1个字母。。大量的用户交互不会让你的用户满意 Windows phone通常会对以下情况使用长列表选择器: 例如:
<DockPanel>
<TextBox Text="{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}"
DockPanel.Dock="Top"/>
<ListBox ItemsSource="{Binding FilteredContacts}" />
</DockPanel>
C#:
公共类视图模型:INotifyPropertyChanged
{
私有字符串_searchTerm;
公共视图模型()
{
Contacts=新的ObservableCollection
{
“彼得”、“丹尼尔”、“凯特”、“约翰”、“安东尼”、“劳拉”、“查尔斯”
};
FilteredContacts=新建ListCollectionView(联系人);
FilteredContacts.Filter=contact=>string.IsNullOrWhiteSpace(SearchTerm)| |(string)contact.Contains(SearchTerm);
}
公共字符串搜索项
{
获取{return\u searchTerm;}
设置
{
if(value==\u searchTerm)返回;
_搜索项=值;
OnPropertyChanged(“搜索术语”);
FilteredContacts.Refresh();
}
}
公共可观测收集联系人{get;private set;}
public CollectionView FilteredContacts{get;private set;}
}
在Windows Phone 8.1中,下拉功能是通过组合框实现的。本教程将帮助您:
注意:我假设您正在基于WinRT运行时创建Windows Phone 8.1应用程序。较旧的Silverlight运行时不支持下拉列表。(尽管您可以使用来实现相同的功能)您可以看看这个问题:那么什么是ViewModel以及如何创建ViewModel?它只是我应该创建的另一个类还是一些预定义的东西?它不是预定义的类。ViewModel基本上是任何类,您可以将其分配给页面或用户控件的DataContext。它应该实现INotifyPropertyChanged接口:ViewModel类保留数据绑定到页面中的数据和行为。通常,每个页面都有一个视图模型类。例如Page1ViewModel、Page2ViewModel等。这并不能解决他最基本的要求-键入时搜索,或实时过滤
public class ViewModel : INotifyPropertyChanged
{
private string _searchTerm;
public ViewModel()
{
Contacts = new ObservableCollection<string>
{
"Peter", "Daniel", "Kate", "John", "Anthony", "Laura", "Charles"
};
FilteredContacts = new ListCollectionView(Contacts);
FilteredContacts.Filter = contact => string.IsNullOrWhiteSpace(SearchTerm) || ((string)contact).Contains(SearchTerm);
}
public string SearchTerm
{
get { return _searchTerm; }
set
{
if (value == _searchTerm) return;
_searchTerm = value;
OnPropertyChanged("SearchTerm");
FilteredContacts.Refresh();
}
}
public ObservableCollection<string> Contacts { get; private set; }
public CollectionView FilteredContacts { get; private set; }
}