0

ユーザーがTextBoxにテキストを入力すると、ListBoxのテキストが自動的に選択されるサンプルコードを準備していました。これまでのところ結果を達成していますが、大文字と小文字を区別しないマッチングはありません。これがコードです。

XAML

<StackPanel>
    <TextBox Name="txt" />
    <ListBox ItemsSource="{Binding Employees}" DisplayMemberPath="Name" SelectedValuePath="Name" 
             Height="100" SelectedValue="{Binding Text, ElementName=txt}" SelectedItem="{Binding SelectedEmployee}"/>
    <Button Content="OK" Command="{Binding SaveCommand}" />
</StackPanel>

このXAMLを次のViewModelにバインドしています。

ViewModel

public class CheckViewModel : ViewModel.ViewModelBase
{
    IList<Employee> employees;

    Employee _selectedEmployee;

    public CheckViewModel()
    {
        employees = new List<Employee>() { 
            new Employee(1, "Morgan"), 
            new Employee(2, "Ashwin"), 
            new Employee(3, "Shekhar"),
            new Employee(5, "Jack"),
            new Employee(5, "Jill")
        };
    }

    public IList<Employee> Employees
    {
        get
        { return employees; }
    }

    public Employee SelectedEmployee
    {
        get
        { return _selectedEmployee; }
        set
        {
            if (_selectedEmployee != value)
            {
                _selectedEmployee = value;
                this.OnPropertyChanged("SelectedEmployee");
            }
        }
    }

    ICommand _saveCommand;
    public ICommand SaveCommand
    {
        get
        {
            if (_saveCommand == null)
            {
                _saveCommand = new ViewModel.RelayCommand((p) =>
                {
                    if(this._selectedEmployee != null)
                        MessageBox.Show(this._selectedEmployee.Name);
                    else
                        MessageBox.Show("None Selected");
                },
                (p) =>
                {
                    return this._selectedEmployee != null;
                });
            }
            return _saveCommand;
        }
    }
}

public class Employee
{
    public Employee(int id, string name)
    {
        this.Name = name;
        this.Id = id;
    }
    public string Name { get; set; }
    public int Id { get; set; }
}

したがって、TextBoxに「Jack」と入力すると、選択が適切に行われます。しかし、大文字と小文字を「ジャック」に変更すると、選択は行われず、SelectedEmployeeはnullになります。確かに、比較では大文字と小文字が区別されますが、この動作をどのように変更できますか?

大文字と小文字を区別しないようにする方法を教えてください。

4

2 に答える 2

2

次のように、テキストボックスをViewModelのプロパティにバインドできます。

    <TextBox Name="txt" Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}"/>

ViewModel:

    public string SearchText
    {
        get { return _searchText; }
        set
        {
            _searchText = value;
            // provide your own search through your collection and set SelectedEmployee
        }
    }
于 2012-09-06T14:38:46.160 に答える
0

HashSetを使用する場合は、比較プログラムを設定できます。また、重複する値を入力することもできなくなります。

HashSet<string> xxx = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);

質問ではありませんが、大文字と小文字を区別しない2つの文字列の使用を比較します

String.Compareメソッド(文字列、文字列、ブール値)

于 2012-09-06T15:24:17.850 に答える