【问题标题】:Incremental search with dropdown using MahApps.Metro使用 MahApps.Metro 进行增量搜索
【发布时间】:2015-06-25 13:54:10
【问题描述】:

有人可以指导我如何从文本输入中实现增量搜索,替代项显示在文本输入字段下方的下拉列表中吗?

问题领域

我们已经能够在对话框中实现增量搜索,但不太了解如何从文本字段中设计和实现它。我们需要组合哪些组件/控件/元素,以及如何连接它们?我们使用的是 MahApps.Metro 的 1.1.2 版本,并且认为切换到 pre-alpha 版本有点麻烦。

一个小例子

假设我们正在查找名称,并且我们在字段中输入了sa,然后我们希望有一个带有该前缀名称的下拉列表,即SamanthaSaraSarah , Savannah, more ...

【问题讨论】:

    标签: c# search mahapps.metro


    【解决方案1】:

    为了实现它,您需要一个文本框和一个弹出窗口。 有一个非常粗略的示例说明如何实现您想要的。 视图模型:

    [PropertyChanged.ImplementPropertyChanged]
    class SearchViewModel
    {
        private readonly string[] items;
        public string[] SearchResults { get; private set; }
        public bool IsSearchShown { get; set; }
        public string SearchText { get; set; }
    
        private void OnSearchTextChanged() 
        {
            UpdateSearchResults();
            IsSearchShown = true;
        }
    
        public string SelectedSearchItem { get; set; }
    
        private void OnSelectedSearchItemChanged()
        {
            SearchText = SelectedSearchItem;
            IsSearchShown = false;
        }
    
        private void UpdateSearchResults()
        {
            SearchResults = items.Where(item => item.StartsWith(SearchText)).ToArray();
        }
    
        public SearchViewModel(string[] items)
        {
            this.items = items;
            SearchResults = new string[0];
        }
    }
    

    查看 xaml:

    <Grid>
        <TextBox Text="{Binding SearchText,UpdateSourceTrigger=PropertyChanged}" x:Name="searchTextBox"/>
        <Popup IsOpen="{Binding IsSearchShown}" PlacementTarget="{Binding ElementName=searchTextBox}">
            <ListBox ItemsSource="{Binding SearchResults}" SelectedItem="{Binding SelectedSearchItem}"/>
        </Popup>
    </Grid>
    

    为了简化我正在使用的代码 Fody.PropertyChanged,考虑到它将对 OnSelectedSearchItemChanged 和 OnSearchTextChanged 的​​调用注入到 SelectedSearchItem 和 SearchText 属性设置器中。

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2023-03-09
      • 1970-01-01
      • 2016-06-20
      • 2014-04-08
      相关资源
      最近更新 更多