3

リストビューで閉じる文字列を検索してフィルタリングするにはどうすればよいですか。

たとえば、リストビューに2つの列があり、両方ともバインド可能です。

bindlnameという名前の最初の列と「 bindfname」という名前の2番目の列名を考えてみましょう。

たとえば、これは私のリストビューレコードです。

ここに画像の説明を入力してください

これで、「Y 」と入力して検索ボタンを押すと、YUZIQとFEAGSYAPSLEがフィルタリングされます。のすべての最初の文字と、文字「 Y」 で始まる名がフィルタリングされます。UYQILUZとUYZKAEが表示されます

4

1 に答える 1

5

を使用ICollectionViewしてデータをバインドListViewでき、ボタンを押すとこのデータをフィルタリングできます。

サンプルコード:

public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
    }

    public class MainViewModel : NotificationObject
    {
        public MainViewModel()
        {
            SearchPerson = new DelegateCommand(this.OnSearchPerson);        

            // test data
            _myDataSource.Add(new Person { Name = "John", Surname = "Blob" });
            _myDataSource.Add(new Person { Name = "Jack", Surname = "Smith" });
            _myDataSource.Add(new Person { Name = "Adam", Surname = "Jackson" });
        }

        private List<Person> _myDataSource = new List<Person>();

        private string _searchString;
        public string SearchString
        {
            get { return _searchString; }
            set { _searchString = value; RaisePropertyChanged(() => SearchPerson); }
        }

        private ICollectionView _people;
        public ICollectionView People
        {
            get { return CollectionViewSource.GetDefaultView(_myDataSource); }           
        }

        public ICommand SearchPerson { get; private set; }
        private void OnSearchPerson()
        {
            if (!string.IsNullOrEmpty(SearchString))
            {
                People.Filter = (item) => { return (item as Person).Name.StartsWith(SearchString) || (item as Person).Surname.StartsWith(SearchString) ? true : false; };
            }
            else
                People.Filter = null;
        }
    }

XAMLファイル:

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <StackPanel Orientation="Horizontal">
            <TextBox Text="{Binding SearchString}" Width="150" />
            <Button Content="Search" Command="{Binding SearchPerson}" />
        </StackPanel>

        <ListView Grid.Row="1" ItemsSource="{Binding People}">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
                        <GridViewColumn Header="Surname" DisplayMemberBinding="{Binding Surname}" />
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

これが完全な例です(ListViewSearch.zip)。

于 2012-11-11T00:44:53.963 に答える