【问题标题】:Create a drop down listBox on Windows Phone 8.1? [closed]在 Windows Phone 8.1 上创建下拉列表框? [关闭]
【发布时间】:2015-03-13 07:33:52
【问题描述】:

我是应用程序开发的新手,所以我只是想说我也没有很多 C# 经验。所以请保持简单。

我需要创建一个带有文本框的下拉列表。就像当一个人输入一个字母时,下拉列表会显示列表中最有可能的单词。 并且列表应该在每次输入字母时不断更新。

【问题讨论】:

标签: c# xaml windows-phone-8.1 windows-applications dropdownbox


【解决方案1】:

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

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

Windows phone 通常使用长列表选择器来处理这种情况:

示例: https://msdn.microsoft.com/en-us/library/windows/apps/jj244365(v=vs.105).aspx

【讨论】:

    【解决方案2】:
    1. 第一步,创建带有文本框和列表框的页面。
    2. 创建 ViewModel 类并将其设置为列表框的 DataContext 属性。
    3. DataBinding TextBox.Text 到例如你的 viewmodel 的字符串 SearchTerm 属性。 DataBind ListBox.ItemsSource 属性以在您的视图模型中列出您的联系人。

    当它起作用时,让我们从过滤开始。我们将使用 CollectionView 进行实时过滤。

    1. CollectionView 可以根据谓词过滤您的联系人集合。我们将创建新的 Collection 视图,根据 SearchTerm 属性定义其过滤器。
    2. DataBindid listbox.ItemsSource 到 CollectionView instear of original Contacts
    3. 在 SearchTerm 属性设置器中,我们需要在 CollectionView 上调用 Refresh,因此框架知道他需要重新绑定我们的列表框。

    最终的 xaml:

    <DockPanel>
        <TextBox Text="{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}" 
                 DockPanel.Dock="Top"/>
        <ListBox ItemsSource="{Binding FilteredContacts}" />
    </DockPanel>
    

    C#:

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

    【讨论】:

    • 那么什么是 ViewModel 以及如何创建一个?它只是我应该创建的另一个类还是一些预定义的东西?
    • 不是预定义类。 ViewModel 基本上是您分配给 Page 或 UserControl 的 DataContext 的任何类。它应该实现 INotifyPropertyChanged 接口:msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx ViewModel 类保留数据和行为,您在页面中绑定到这些数据和行为。通常,您每页有一个视图模型类。例如 Page1ViewModel、Page2ViewModel 等
    【解决方案3】:

    在 Windows Phone 8.1 中,下拉功能是通过组合框实现的。这里的教程应该可以帮助到你:http://www.c-sharpcorner.com/UploadFile/2d2d83/combobox-in-windows-phone-8-1/

    注意:我假设您正在创建基于 WinRT 运行时的 Windows Phone 8.1 应用程序。较旧的 Silverlight 运行时不支持下拉菜单。 (虽然你可以使用Windows Phone toolkit 来实现同样的效果)

    【讨论】:

    • 这并没有解决他最基本的要求——输入时搜索,或者实时过滤
    猜你喜欢
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多