WPF在等待用户选择的同时保持UI响应

时间:2013-10-03 22:37:45

标签: wpf vb.net vb6-migration

我在VB.Net中有这个代码,在windows窗体中。我需要等待用户的选择,但保持UI响应,以便用户可以从ListBox中选择一个选项。 listbox_SelectionChanged事件将名为selectedElement的布尔值设置为true,因此继续执行。在WPF中,我发现可以使用线程进行,但我不知道该怎么做。有什么建议?谢谢:))

    Do
       System.Windows.Forms.Application.DoEvents()
    Loop Until selectedElement

1 个答案:

答案 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心态。