Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在Windows Phone 8.1上创建下拉列表框?_C#_Xaml_Windows Phone 8.1_Windows Applications_Dropdownbox - Fatal编程技术网

C# 是否在Windows Phone 8.1上创建下拉列表框?

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通常会对以下

我是应用程序开发新手,所以我只是想说,我对C#也没有太多经验。所以请简单一点

我需要创建一个带有文本框的下拉列表。就像输入字母一样,下拉列表将显示列表中最可能出现的单词。
而且每次输入信件时,列表都会不断更新。

我建议您不要使用带有文本框的下拉列表。这是一种桌面控件。对于移动用户来说,使用这种控件并不友好

因为当你打字时,键盘会隐藏60%的屏幕。然后,在键入1个字母后,必须按back键隐藏键盘。然后查看结果,再添加1个字母。。大量的用户交互不会让你的用户满意

Windows phone通常会对以下情况使用长列表选择器:

例如:

  • 第一步,使用textbox和listbox创建页面
  • 创建ViewModel类并将其设置为listbox的DataContext属性
  • 数据绑定文本框。文本到例如viewmodel的字符串SearchTerm属性。将ListBox.ItemsSource属性数据绑定到viewmodel中的联系人列表
  • 当这起作用时,让我们从过滤开始。我们将使用CollectionView进行实时过滤

  • CollectionView可以根据谓词筛选联系人集合。我们将创建新的集合视图,并基于SearchTerm属性定义其过滤器
  • 数据绑定listbox.Items来源于CollectionView,而不是原始联系人
  • 在SearchTerm属性设置器中,我们需要在CollectionView上调用Refresh,这样框架就知道他需要重新绑定我们的列表框
  • 最后的xaml:

    <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; }
    }