Поделиться через


AutoCompleteBox.FilterMode Property

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Gets or sets how the text in the text box is used to filter items specified by the ItemsSource property for display in the drop-down.

Namespace:  System.Windows.Controls
Assembly:  System.Windows.Controls.Input (in System.Windows.Controls.Input.dll)

Syntax

'Declaration
Public Property FilterMode As AutoCompleteFilterMode
public AutoCompleteFilterMode FilterMode { get; set; }
<sdk:AutoCompleteBox FilterMode="autoCompleteFilterMode"/>

XAML Values

Property Value

Type: System.Windows.Controls.AutoCompleteFilterMode
One of the AutoCompleteFilterMode values The default is StartsWith.

Exceptions

Exception Condition
ArgumentException

The specified value is not a valid AutoCompleteFilterMode.

Remarks

Use the FilterMode property to specify how possible matches are filtered. For example, possible matches can be filtered in a predefined or custom way. The filter mode is automatically set to Custom if you set the ItemFilter property.

Examples

The following example shows how to use the ValueMemberPath and FilterMode properties to populate the drop-down portion of the AutoCompleteBox control.

Run this sample

Imports System.Collections

Partial Public Class MainPage
    Inherits UserControl
    Private MyMusic As New List(Of Recording)()
    Public Sub New()
        InitializeComponent()

        ' Add items to the collection. 
        MyMusic.Add(New Recording("Chris Sells", "Chris Sells Live", _
            New DateTime(2008, 3, 5)))
        MyMusic.Add(New Recording("Chris Sells", "Sells Tells", _
            New DateTime(2004, 4, 6)))
        MyMusic.Add(New Recording("Luka Abrus", "The Road to Redmond", _
            New DateTime(2007, 8, 3)))
        MyMusic.Add(New Recording("Luka Abrus", "Luka", _
            New DateTime(2005, 12, 8)))
        MyMusic.Add(New Recording("Luka Abrus", "Love and Luka ", _
            New DateTime(2005, 11, 8)))
        MyMusic.Add(New Recording("Jim Hance", "The Best of Jim Hance", _
            New DateTime(2007, 2, 6)))

        ' Set the data context for the AutoCompleteBox. 
        myACB.DataContext = MyMusic
    End Sub
End Class

' Simple business object. 
Public Class Recording
    Public Sub New()
    End Sub
    Public Sub New(ByVal artistName As String, ByVal cdName As String, _
                   ByVal release As DateTime)
        Artist = artistName
        Name = cdName
        ReleaseDate = release
    End Sub
    Private _Artist As String
    Public Property Artist() As String
        Get
            Return _Artist
        End Get
        Set(ByVal value As String)
            _Artist = value
        End Set
    End Property
    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property
    Private _ReleaseDate As DateTime
    Public Property ReleaseDate() As DateTime
        Get
            Return _ReleaseDate
        End Get
        Set(ByVal value As DateTime)
            _ReleaseDate = value
        End Set
    End Property
End Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;
using System.Collections;

namespace ACBValueMemberPath
{
    public partial class MainPage : UserControl
    {
        List<Recording> MyMusic = new List<Recording>();
        public MainPage()
        {
            InitializeComponent();
            // Add items to the collection.
            MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",
                new DateTime(2008, 3, 5)));
            MyMusic.Add(new Recording("Chris Sells", "Sells Tells",
               new DateTime(2004, 4, 6)));
            MyMusic.Add(new Recording("Luka Abrus",
                "The Road to Redmond", new DateTime(2007, 8, 3)));
            MyMusic.Add(new Recording("Luka Abrus",
                "Luka", new DateTime(2005, 12, 8)));
            MyMusic.Add(new Recording("Luka Abrus",
               "Love and Luka", new DateTime(2005, 12, 8)));
            MyMusic.Add(new Recording("Jim Hance",
                "The Best of Jim Hance", new DateTime(2007, 2, 6)));

            // Set the data context for the AutoCompleteBox.
            myACB.DataContext = MyMusic;
        }
    }

    // Simple business object.
    public class Recording
    {
        public Recording() { }
        public Recording(string artistName, string cdName, DateTime release)
        {
            Artist = artistName;
            Name = cdName;
            ReleaseDate = release;
        }
        public string Artist { get; set; }
        public string Name { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

<!-- NOTE: 
  By convention, the sdk prefix indicates a URI-based XAML namespace declaration 
  for Silverlight SDK client libraries. This namespace declaration is valid for 
  Silverlight 4 only. In Silverlight 3, you must use individual XAML namespace 
  declarations for each CLR assembly and namespace combination outside the scope 
  of the default Silverlight XAML namespace. For more information, see the help 
  topic "Prefixes and Mappings for Silverlight Libraries". 
-->
<UserControl xmlns:sdk="https://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    x:Class="ACBValueMemberPath.MainPage" 
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:ACBValueMemberPath"
    Width="400" Height="413">
    <StackPanel x:Name="LayoutRoot" Background="White" >
        <StackPanel Orientation="Horizontal">
         <TextBlock Margin="5" Text="Enter a recording name:" TextWrapping="Wrap" />
            <sdk:AutoCompleteBox FilterMode="ContainsOrdinal" VerticalAlignment="Top" Margin="5" Width="170" 
                Height="30" x:Name="myACB" 
                ItemsSource="{Binding}" 
                ValueMemberPath="Name">
                <sdk:AutoCompleteBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                        <TextBlock Text="{Binding Path=Name}"  />
                        <TextBlock Text="{Binding Path=Artist}"  />
                        </StackPanel>
                    </DataTemplate>
                </sdk:AutoCompleteBox.ItemTemplate>
            </sdk:AutoCompleteBox>
        </StackPanel>
      </StackPanel>
</UserControl>

The following example shows how to set the FilterMode to Custom, and then set the ItemFilter property to a custom filter method for the Employee object. The custom filter returns matches from employees' first or last name. This code example requires a reference to the System.Windows.Controls.Input assembly.

Private employees As New List(Of Employee)()
Public Sub New()
    InitializeComponent()
    ' Add some items to the employee list. 
    employees.Add(New Employee("Sells", "Chris", "csells", 1234))
    employees.Add(New Employee("Cabatana", "Reina", "rcaba", 5678))
    employees.Add(New Employee("Sprenger", "Christof", "cspreng", 9123))
    employees.Add(New Employee("Brandel", "Jonas", "jbrandel", 4567))
    employees.Add(New Employee("Bye", "Dennis", "dbye", 8912))
    employees.Add(New Employee("Reid", "Miles", "mreid", 3456))

    ' Set the item source. 
    myACB.ItemsSource = employees


...


       ' Set the ItemFilter property to the search method. 
     myACB.ItemFilter = AddressOf SearchEmployees


...


End Sub


...


Private Function SearchEmployees(ByVal search As String, ByVal value As Object) As Boolean
    ' Cast the value to an Employee. 
    Dim emp As Employee = TryCast(value, Employee)
    If emp IsNot Nothing Then
        ' Look for a match in the first and last names. 
        If emp.LastName.ToLower().StartsWith(search) Then
            Return True

        ElseIf emp.FirstName.ToLower().StartsWith(search) Then
            Return True
        End If
    End If
    ' If no match, return false. 
    Return False
End Function


...


Public Class Employee
    Private _LastName As String
    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property
    Private _FirstName As String
    Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName = value
        End Set
    End Property
    Private _EmailName As String
    Public Property EmailName() As String
        Get
            Return _EmailName
        End Get
        Set(ByVal value As String)
            _EmailName = value
        End Set
    End Property
    Private _ID As Integer
    Public Property ID() As Integer
        Get
            Return _ID
        End Get
        Set(ByVal value As Integer)
            _ID = value
        End Set
    End Property
    Public Sub New(ByVal empLastName As String, ByVal empFirstName As String, ByVal empEmail As String, ByVal empID As Integer)
        LastName = empLastName
        FirstName = empFirstName
        EmailName = empEmail
        ID = empID
    End Sub
    Public Overloads Overrides Function ToString() As String
        Return ((("Employee: " & FirstName & " ") + LastName + System.Environment.NewLine & "Email: ") + EmailName + System.Environment.NewLine & "ID: ") + ID.ToString()
    End Function
End Class
List<Employee> employees = new List<Employee>();
public MainPage()
{
    InitializeComponent();
    // Add some items to the employee list.
    employees.Add(new Employee("Sells", "Chris", "csells", 1234));
    employees.Add(new Employee("Cabatana", "Reina", "rcaba", 5678));
    employees.Add(new Employee("Sprenger", "Christof", "cspreng", 9123));
    employees.Add(new Employee("Brandel", "Jonas", "jbrandel", 4567));
    employees.Add(new Employee("Bye", "Dennis", "dbye", 8912));
    employees.Add(new Employee("Reid", "Miles", "mreid", 3456));

    // Set the item source.
    myACB.ItemsSource = employees;


...


// Set the ItemFilter property to the search method.
myACB.ItemFilter += SearchEmployees;


...


}


...


bool SearchEmployees(string search, object value)
{
    // Cast the value to an Employee.
    Employee emp = value as Employee;
    if (emp != null)
    {
        // Look for a match in the first and last names.
        if (emp.LastName.ToLower().StartsWith(search))
            return true;

        else if (emp.FirstName.ToLower().StartsWith(search))
            return true;
    }
    // If no match, return false.
    return false;
}


...


public class Employee
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string EmailName { get; set; }
    public int ID { get; set; }
    public Employee(string empLastName, string empFirstName, string empEmail, int empID)
    {
        LastName = empLastName;
        FirstName = empFirstName;
        EmailName = empEmail;
        ID = empID;
    }
    public override string ToString()
    {
        return "Employee: " + FirstName + " " + 
            LastName + System.Environment.NewLine + 
            "Email: " + EmailName + System.Environment.NewLine + "ID: " +
            ID.ToString();
    }
}
<StackPanel x:Name="LayoutRoot" Background="LightGray">
     <TextBlock FontWeight="Bold" Text="AutoCompleteBox Custom Filter Example" Margin="5"/>
     <StackPanel  Orientation="Horizontal">
         <TextBlock Text="Employee:" Margin="5" HorizontalAlignment="Left"  VerticalAlignment="Center"/>
         <sdk:AutoCompleteBox Height="75" Width="200" VerticalAlignment="Center" HorizontalAlignment="Right" 
         x:Name="myACB" FilterMode="Custom" ToolTipService.ToolTip="Enter employee name."/>
     </StackPanel>
     </StackPanel>

Version Information

Silverlight

Supported in: 5, 4, 3

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.