2011-11-01 107 views
0

請有人告訴我將使用的技術,用於以下場景。觸發方法取決於第二個窗口上的動作

我想在驗證用戶身份之前,允許我的代碼執行其他操作。

我有一個方法,打開一個包含我的身份驗證表單(用戶名和密碼)的新窗口。

private bool userLogin() 
    { 
     Window loginInterface = new Window() 
     { 
      Title = "Please Login", 
      Content = new login(), 
      Height = 282, 
      Width = 300, 
      ResizeMode = ResizeMode.NoResize, 
      WindowStartupLocation = WindowStartupLocation.CenterOwner 

     }; 

     loginInterface.Owner = this; 

     loginInterface.ShowDialog(); 

     return true; 

    } 

我調用此方法像這樣,在按一下按鈕:

private void perform_action(object sender, RoutedEventArgs e) 
    { 
     if (!userLogin()) 
     { 
      // Failed login, do nothing 
     } 
     else 
     { 
      // Authentication successful, perform action 
      delete_item(); 
     } 
    } 

的窗口打開正常,但我怎麼能現在讓我的方法的返回true或false基礎上,用戶什麼在打開的表單上呢?

所以,當用戶點擊名爲login_button的登錄按鈕時,我的代碼已經驗證了憑據,但我需要發回'bool'值。

我可以讓我的第一個窗口幾乎等待一個動作在另一個窗口上執行並獲得響應嗎?

回答

1

Window.ShowDialog()方法實際上已經返回bool?。可以通過設置(例如)this.DialogResult = true來設置Window中的任意點。然後可以關閉該窗口並從調用代碼中訪問該值。

要與結果關閉窗口:

this.DialogResult = true; 

...然後使用該結果在調用代碼:

var myWindow = /*create window*/; 
var result = myWindow.ShowDialog(); 
if (result == true) 
{ 
    //... 
} 
+0

1'Close'是沒有必要的2'結果'是可空的,所以聲明不會像這樣工作 –

+1

好點 - 謝謝 –

+0

謝謝!起初我遇到了麻煩,因爲我把Window設置爲UserControl。一旦我改變了,我就可以訪問DialogResult變量。 – Luke

0

要關閉登錄屏幕,您可以將DialogResult設置爲true或false,並且ShowDialog返回此值。對於其他事情,您可以在第二個窗口上創建events,並在第一個窗口上訂閱它們。

0

userLogin應該返回非true的內容。

我會做這樣的事情(根據顯示的代碼):

return loginInterface.WasSuccessful; // you'd have to add this property