我在VB.Net中有这个代码,在windows窗体中。我需要等待用户的选择,但保持UI响应,以便用户可以从ListBox中选择一个选项。 listbox_SelectionChanged事件将名为selectedElement的布尔值设置为true,因此继续执行。在WPF中,我发现可以使用线程进行,但我不知道该怎么做。有什么建议?谢谢:))
Do
System.Windows.Forms.Application.DoEvents()
Loop Until selectedElement
答案 0 :(得分:1)
这是一种非常糟糕的编码方式。即使在winforms。
首先,如果你在WPF工作,你真的需要理解The WPF Mentality。
在MVVM WPF中,您的ViewModel
应该控制应用程序在对用户输入作出反应时执行的操作。
一般来说,这就是你如何处理“等待用户在WPF中选择ListBox
中的项目:
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)已经有了内部 “message loop”,用于监听用户输入并在需要时引发事件。
我建议你阅读上面链接的答案和相关的博客文章,了解你需要什么才能从传统的,程序化的winforms方法转变为基于DataBinding的WPF心态。