Listbox SelectionChanged在窗口布局更改时触发错误

时间:2014-02-07 20:49:39

标签: wpf events layout listbox selectionchanged

我在一个带有其他组件的窗口上有一个ListBox。 当我更改这些其他组件的可见性时,ListBox使用新的selectedIndex = 0触发其SelectionChanged事件。这是非常不受欢迎的。 (如果插入断点,或者可能是睡眠,则不会发生这种情况。)

我想要一个可靠的事件,只在用户实际更改ListBox选择时触发,而不是在WPF仅更改窗口布局时触发。 这样的事情是存在的,或者对于更强大的东西,我应该使用按钮从头开始构建我自己的控件吗?

1 个答案:

答案 0 :(得分:0)

  

更健壮的东西

如果您需要强大的应用程序,则需要强大的设计。

如果你正在使用WPF,你需要抛弃传统的基于事件的方法,理解并接受The WPF Mentality

  

我想知道用户何时使用鼠标或键盘来更改   列表框选择

不是处理事件,而是放置一堆代码,并且希望 Visual Tree的复杂性将允许它工作,只需使用正确的DataBinding

<ListBox ItemsSource="{Binding SomeCollection}"
         SelectedItem="{Binding SelectedItem}"/>

到适当的ViewModel

public class MyViewModel
{
    public ObservableCollection<MyClass> SomeCollection {get;set;}

    public MyClass SelectedItem {get;set;} //Don't forget INotifyPropertyChanged
}
  • 了解我是如何处理任何事件或放弃任何代码的。 Visual树可以做任何想做的事情,并提出尽可能多的事件,我的代码仍然可以工作。
  • 另请参阅此方法如何更清晰,因为它允许UI和数据之间的真正分离。
  • 我可以永远继续讨论适当的MVVM的优点,但我现在太懒了。如果您需要进一步的帮助,请告诉我。