2013-10-03 32 views
1

我在VB.Net中使用Windows窗體中的此代碼。我需要等待用戶的選擇,但保持UI響應,以便用戶可以從列表框中選擇一個選項。 listbox_SelectionChanged事件將設置一個名爲selectedElement的布爾值爲true,以便繼續執行。在WPF中,我發現可以使用線程來完成,但我不知道如何去做。有什麼建議?謝謝:)WPF在等待用戶選擇的同時保持UI響應

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

你還在等什麼阻止用戶界面?什麼阻止了用戶界面 –

+1

'DoEvents()'是邪惡的。即使在winforms中。發佈保持執行並阻止UI線程的相關代碼。 –

回答

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 
    } 
} 

請注意,這與循環方法有何根本不同。

沒有必要「循環」任何東西,因爲WPF(以及winforms)已經有一個內部的「消息循環」,用於監聽用戶輸入並在需要時引發事件。

我建議你閱讀上面的鏈接答案和相關的博客文章,瞭解你需要從傳統的,程序化的Winforms方法轉變爲基於DataBinding的WPF思路。