WPF组合框的选定索引更改?

时间:2013-01-15 17:18:15

标签: wpf vb.net combobox selectionchanged

我正在将我的应用程序从WinForms转换为WPF。我遇到了这个问题,如果我清除一个组合框,在WinForms中,它不会触发combobox.selectedindexchange。它仅在用户实际更改索引时触发。

这就是我需要的功能。但是在WPF中我只能找到combobox.SelectionChanged。不幸的是,这会触发索引更改和清除组合框(任何更改)。

在WPF中,如何在用户更改索引时才触发事件?我假设有一个我想念的解决方案,就像WinForms解决方案一样。我试图不玩全局变量的游戏,并且必须跟踪之前选择的内容....这是一团糟。

Mouseleave也是一团糟。

我非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

在您的情况下,您可以在SelectionChanged事件中实施:

Private Sub OnSelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
    Dim combo = TryCast(sender, ComboBox)


    If combo.SelectedItem IsNot Nothing Then
        'do something
    End If
End Sub

答案 1 :(得分:1)

您可以删除事件处理程序,调用clear方法并再次添加事件处理程序。

示例代码:

<StackPanel>
    <ComboBox Name="myCB"                   
              SelectionChanged="ComboBox_SelectionChanged">
         <ComboBoxItem>test1</ComboBoxItem>
         <ComboBoxItem>test2</ComboBoxItem>
         <ComboBoxItem>test3</ComboBoxItem>
     </ComboBox>

     <Button Content="Clear" Click="Button_Click" />
</StackPanel>

MainWindow类:

Class MainWindow 

    Private Sub ComboBox_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
        Console.WriteLine("Selected index: {0}", CType(sender, ComboBox).SelectedIndex)
    End Sub

    Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
        RemoveHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged
        Me.myCB.Items.Clear()
        AddHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged    
    End Sub
End Class