Выделение ComboBox SelectionChanged Event при предварительном просмотре - PullRequest
1 голос
/ 31 января 2012

Итак, у меня есть ComboBox с привязкой к DataSet, и я хочу, чтобы событие вызывалось только при изменении выбора.Я пытался использовать событие SelectionChanged, но оно срабатывает всякий раз, когда есть предложенный элемент.Например, если я наберу «eb», тогда будет выбран «ebtoulson» с выделенным «toulson».У меня вопрос, как бы я отключил это событие от срабатывания по предложению, или я использую неправильное событие?Любые предложения будут высоко ценится.

Ответы [ 2 ]

0 голосов
/ 20 июля 2012

Я придумал это решение. Я не думаю, что это самый оптимальный вариант, но он охватывает ваш случай. Я использую событие PreviewTextInput для обработки выделения с помощью ввода текста и DropDownClosed для обработки выделения с помощью мыши. Мой ComboBox элемент управления называется cbTest1, а код, который я использовал, выглядит следующим образом:

private void cbTest1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var q = from i in cbTest1.ItemsSource.Cast<ComboBoxItem>()
            where ((string)i.Content).StartsWith(e.Text, StringComparison.OrdinalIgnoreCase)
            select i;
    if (q.Count() == 1)
    {
        // Have typed out a unique name match.
        var ActiveItem = cbTest1.SelectedItem;
    }
    else
    {
        // Name does not match or has multiple matches.
    }
}

private void cbTest1_DropDownClosed(object sender, EventArgs e)
{
    var ActiveItem = cbTest1.SelectedItem;
}

Он использует выражение Linq, чтобы определить, сузил ли выбор того, что пользователь до сих пор набрал, до одного элемента. Однако стоимость этого запроса может быть слишком высокой для вашего случая. Просто попробуйте и дайте мне знать.

0 голосов
/ 31 января 2012

Когда вы печатаете, и появляется предложение, вы фактически изменяете выбранный элемент, поэтому событие должно сработать.

Какая ваша конкретная потребность, чтобы это работало только с пользовательским интерфейсом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...