我如何在Silverlight中确定是否是更改ComboBox的用户?

时间:2010-11-15 09:44:20

标签: c# silverlight

在ComboBox.SelectionChanged事件中,我想知道谁更改了ComboBox值,用户或其他一些代码。

首先我检查了cmbBox.IsDropDownOpen是否为true。但如果用户使用键盘更改了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时,两个事件一个接一个地被触发,所以bool仍然是假的。

4 个答案:

答案 0 :(得分:3)

如果您正在使用Model-View-ViewModel pattern(这是WPF和Silverlight应用程序的事实标准,并且有充分理由),那么这应该是微不足道的:当组合框的值发生更改时,Silverlight将设置您自己的ViewModel属性。您可以在属性设置器中放置逻辑,以响应您需要的更改。

答案 1 :(得分:1)

您是否尝试使用xxxCombo_DropDownClosed事件?

答案 2 :(得分:1)

用于在ComboBox值中确定的相应事件已更改为SelectionChanged事件。但是,当ItemsSource被分配时,此事件也会触发,因此它不是用户更改的绝对指南,但它非常接近。

一种方法是在用户控件加载事件中或在您知道已分配SelectionChanged的其他位置为ItemsSource分配事件处理程序。

答案 3 :(得分:0)

我想我没有说清楚问题:我想区分用户和代码。我希望我在最后一次编辑中澄清这一点。

我想没有简单的方法可以做到这一点。我的解决方案是从更改ComboBox值的代码中设置一些标志。这很简单,因为它是我的代码:)。