Как в Silverlight определить, изменил ли пользователь ComboBox? - PullRequest
2 голосов
/ 15 ноября 2010

В событии ComboBox.SelectionChanged я хочу знать, кто изменил значение ComboBox, пользователя или какой-либо другой код.

Сначала я проверил, истинно ли cmbBox.IsDropDownOpen. Но это неверно, если пользователь изменил ComboBox с помощью клавиатуры.

Тогда я подумал проверить, сфокусировано ли это. Silverlight ComboBox не имеет свойства IsFocused, поэтому я сохранил состояние в обработчиках событий cmbBoxGotFocus и cmbBoxLostFocus:

    private bool cmbBox_isFocused = false;
    private void cmbBox_GotFocus(object sender, RoutedEventArgs e)
    {
        cmbSalesPerson_isFocused = true;
    }

    private void cmbBox_LostFocus(object sender, RoutedEventArgs e)
    {
        cmbSalesPerson_isFocused = false;
    }

К сожалению, это тоже не работает, потому что есть какое-то странное поведение, которое я не понимаю: когда пользователь нажимает на ComboBox, 2 события запускаются одно за другим, поэтому bool остается ложным.

Ответы [ 4 ]

3 голосов
/ 15 ноября 2010

Если вы используете шаблон Model-View-ViewModel (который является стандартом де-факто для приложений WPF и Silverlight и по уважительной причине), то это должно быть тривиально: когда выпадающий списокзначение будет изменено, Silverlight автоматически установит свойство вашего ViewModel.Вы можете поместить логику в свой установщик свойств, чтобы реагировать на изменения, как вам нужно.

1 голос
/ 15 ноября 2010

Подходящим событием, которое нужно использовать для определения значения ComboBox, является событие SelectionChanged. Однако это событие также может возникать, когда назначено ItemsSource, поэтому оно не является абсолютным ориентиром для изменения пользователем, но очень близко.

Один из подходов заключается в назначении обработчика события для SelectionChanged в событии загрузки пользовательского элемента управления или в какой-то другой точке, где вы знаете, что ItemsSource назначено.

1 голос
/ 15 ноября 2010

Вы пытались использовать событие xxxCombo_DropDownClosed?

0 голосов
/ 13 декабря 2010

Думаю, я не прояснил вопрос: я хотел провести различие между пользователем и кодом.Надеюсь, я разъяснил это с последним редактированием.

Я думаю, что сделать это нелегкоМое решение состояло в том, чтобы установить некоторый флаг из кода, который изменил значение ComboBox.Это было легко, так как это был мой код:).

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