簡體   English   中英

c# wpf 中組合框的過濾

[英]Filtering of combobox in c# wpf

XAML:

<ComboBox x:Name="cmb" HorizontalAlignment="Left" 
              Margin="183,39,0,0" 
              VerticalAlignment="Top" 
              Width="120" 
              ItemsSource="{Binding FilteredNames, Mode=OneWay}"
              IsTextSearchEnabled="True"
              IsEditable="True"
              TextSearch.Text="{Binding Filter, UpdateSourceTrigger=PropertyChanged}"/>

視圖模型:

public List<string> FilteredNames
{
    get
    {
        return (names.FindAll(x => x.Contains(filter))).ToList<string>();
    }
}

public string Filter
{
    get
    {
        return this.filter;
    }
    set
    {
        this.filter = value;
        NotifyPropertyChanged("FilteredNames");
    }
}

public ViewModel()
{
    this.names = new List<string>() { "Jerry", "Joey", "Roger", "Raymond", "Jessica", "Mario", 
                                              "Jonathan" };
    this.filter = "";
}

這是我已經實施的。 請幫助我了解如何在組合框中獲取過濾下拉列表。 就像當我輸入“j”時,我想獲取其中包含“j”的所有項目。

您應該將字符串輸入綁定到 ComboBox 的 Text 屬性:

Text="{Binding Filter, UpdateSourceTrigger=PropertyChanged}"

另外我建議使用CollectionView進行這樣的過濾:

public ICollectionView FilteredNames { get; set; }
IList<string> names = new List<string>() { "Jerry", "Joey", "Roger", "Raymond", "Jessica", "Mario", "Jonathan" };

public VM()
{
    FilteredNames = CollectionViewSource.GetDefaultView(names);
    FilteredNames.Filter = (obj) => 
    {
        if (!(obj is string str))
            return false;

        return str.Contains(filter);
    };
}

string filter = "";
public string Filter
{
    get 
    {
        return this.filter;
    }
    set 
    {
        this.filter = value;
        FilteredNames?.Refresh();
    }
}

XAML:

<ComboBox x:Name="cmb" HorizontalAlignment="Left" 
              Margin="183,39,0,0" 
              VerticalAlignment="Top" 
              Width="120" 
              ItemsSource="{Binding FilteredNames, Mode=OneWay}"
              IsTextSearchEnabled="True"
              IsEditable="True"
              TextSearch.Text="{Binding Filter, UpdateSourceTrigger=PropertyChanged}"/>

ViewModel:

public List<string> FilteredNames
{
    get
    {
        return (names.FindAll(x => x.Contains(filter))).ToList<string>();
    }
}

public string Filter
{
    get
    {
        return this.filter;
    }
    set
    {
        this.filter = value;
        NotifyPropertyChanged("FilteredNames");
    }
}

public ViewModel()
{
    this.names = new List<string>() { "Jerry", "Joey", "Roger", "Raymond", "Jessica", "Mario", 
                                              "Jonathan" };
    this.filter = "";
}

這就是我已經實現的。 請幫助我了解如何在組合框中獲取過濾下拉列表。 就像我輸入“ j”時一樣,我想獲取其中包含“ j”的所有項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM