public void ListLoad() { ElementList = new List(); // creation a list of strings ElementList.Add("1"); // add a item of string ElementList.Add("2"); // add a item of string DataContext = this; // set the data context }
ICollectionView view = CollectionViewSource.GetDefaultView(ElementList); view.Filter = (o) => {return o;}//here is the lambda with your conditions to filter
using System; using System.Windows; using System.Windows.Controls; public static class Filter { public static readonly DependencyProperty ByProperty = DependencyProperty.RegisterAttached( "By", typeof(Predicate
在xaml中使用如下:
...
和viewmodel:
public class ViewModel : INotifyPropertyChanged { private string filterText; private Predicate filter; public event PropertyChangedEventHandler PropertyChanged; public ObservableCollection Foos { get; } = new ObservableCollection(); public string FilterText { get { return this.filterText; } set { if (value == this.filterText) return; this.filterText = value; this.OnPropertyChanged(); this.Filter = string.IsNullOrEmpty(this.filterText) ? (Predicate)null : this.IsMatch; } } public Predicate Filter { get { return this.filter; } private set { this.filter = value; this.OnPropertyChanged(); } } protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private bool IsMatch(object item) { return IsMatch((Foo)item, this.filterText); } private static bool IsMatch(Foo item, string filterText) { if (string.IsNullOrEmpty(filterText)) { return true; } var name = item.Name; if (string.IsNullOrEmpty(name)) { return false; } if (filterText.Length == 1) { return name.StartsWith(filterText, StringComparison.OrdinalIgnoreCase); } return name.IndexOf(filterText, 0, StringComparison.OrdinalIgnoreCase) >= 0; } }
如果将Dictionary as itemsource设置为listbox,请使用以下代码进行排序,