我剛開始使用Caliburn Micro WindowManager。在Caliburn Micro中使用WindowManager時,如何從對話框中返回對象
我設法顯示一個包含我的WPF視圖的模式對話框。
我需要從對話框返回一個對象。做這個的最好方式是什麼?
背景 - 這是一個登錄對話框。我需要驗證用戶名和密碼並返回用戶配置信息。
我剛開始使用Caliburn Micro WindowManager。在Caliburn Micro中使用WindowManager時,如何從對話框中返回對象
我設法顯示一個包含我的WPF視圖的模式對話框。
我需要從對話框返回一個對象。做這個的最好方式是什麼?
背景 - 這是一個登錄對話框。我需要驗證用戶名和密碼並返回用戶配置信息。
有兩種方法我可以想到做到這一點。我假設你的Login viewmodel類派生自Caliburn.Micro.Screen。
1)讓視圖模型(代表您的登錄屏幕)公開一個返回用戶配置的屬性。然後,您可以像下面訪問它在成功登錄:
var windowManager = new WindowManager();
var login = new MyLoginViewModel();
if (windowManager.ShowDialog(login) == true)
{
var configurationInfo = login.MyUserConfigurationInfo;
}
2)在成功登錄時添加的用戶配置信息到應用程序的資源字典。下面的例子顯示了你在login viewmodel裏面設置「Login」方法。
void Login()
{
/* Authentication Logic success */
App.Current.Resources["UserConfigurationInfo"] = new UserConfigurationInfo();
TryClose(true);
}
我不知道Caliburn Micro WindowManager,但如果你的模態對話框視圖有一個viewmodel,那麼只需要viewmodel你可以訪問你的對象?
在我的項目中有一個ILoginViewModel,我在app.c的DialogResult = true後使用。 (我用MEF輸出這個信息,所以它很容易訪問我的模塊)
謝謝阿德里安。你的第一個建議看起來最好。如何從登錄視圖模型設置窗口管理器的結果,以便我可以測試真實? –
它會像第二個選項一樣工作,除非您設置屬性而不是某些應用程序資源。實質上,當用戶在LoginViewModel內進行身份驗證時,您需要將LoginViewModel的「MyUserConfigurationInfo」屬性設置爲該類型的實例。 – Adrian