这是一种非常糟糕的编码方式。即使在winforms中。
首先,如果你在 WPF 中工作,你真的需要了解WPF Mentality。
在 MVVM WPF 中,您ViewModel
应该控制应用程序在响应用户输入时执行的操作。
一般来说,这是您处理“等待用户ListBox
在 WPF 中选择一个项目”的方式:
XAML:
<ListBox ItemsSource="{Binding SomeCollection}"
SelectedItem="{Binding SelectedItem}"/>
视图模型:
public class SomeViewModel
{
public ObservableCollection<SomeData> SomeCollection {get;set;}
//Methods to instantiate and populate the Collection.
private SomeData _selectedItem;
public SomeData SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
//PropertyChanged() is probably desired here.
UserHasSelectedAnItem(); //Method invocation
}
}
private void UserHasSelectedAnItem()
{
//Actions after the user has selected an item
}
}
RefreshTheUIHack();
请注意,这与循环方法有何根本不同。
没有必要“循环”任何东西,因为 WPF(以及 winforms)已经有一个内部“消息循环”,它监听用户输入并在需要时引发事件。
我建议您阅读上面链接的答案和相关的博客文章,以了解从传统的程序化 winforms 方法转变为基于 DataBinding 的 WPF 思维需要什么。