1

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

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

1 回答 1

1

这是一种非常糟糕的编码方式。即使在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 思维需要什么。

于 2013-10-03T23:40:19.337 回答