2011-08-10 69 views
1

我正在使用Silverlight & MVVM模式。當輸入鍵被按下時數據沒有被綁定

<TextBox Name="UserNameText" Text="{Binding Path=Username, Mode=TwoWay}" HorizontalContentAlignment="Stretch"/> 

在這個我已經綁定文本框屬性名,當按下Enter鍵時,我在執行視圖模型的LoginCommand。

private void LayoutRoot_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Enter) 
      { 
       this._viewModel.LoginCommand.Execute(null); 
      } 
     } 

當在文本框輸入用戶名和輸入鍵,從用戶名文本框中按下時,LoginCommand叫,但價值並不在屬性格式用戶名更新。它仍然包含null。

如果只有焦點丟失,則值被綁定。如何解決這個問題?

回答

1

變化UpdateSourceTrigger=PropertyChanged的約束力。默認情況下,文本框只會更新其在LostFocus上的綁定值。將它設置爲PropertyChanged將使它在任何時候更新屬性更改綁定值。

<TextBox Name="UserNameText" 
     Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}" /> 
+0

對不起。它沒有在Silverlight中工作。無論你在WPF中提出什麼建議,但不在SL中。 – jaks

+0

@Jai下面是在Silverlight中創建「AttachedProperty」來實現此行爲的人的示例:http://marlongrech.wordpress.com/2010/12/27/updatesourcetrigger-propertychanged-for-silverlight-4-binding/ – Rachel

0

你不能解決這個問題,它是如何綁定的作品(它失去了焦點更新,你是對的)。 然而,該解決方案是非常簡單的:你可以發送文本框的文本作爲命令的參數:

this._viewModel.LoginCommand.Execute(((TextBox)sender).Text); 
+0

oops。我需要將用戶名和密碼都傳遞給LoginCommand。怎麼做? – jaks

+0

好吧,你可以創建在一個字符串,如「登錄|密碼」,然後解析裏面的命令執行委託)或者你可以創建一個額外的實體類,如公共類UserCreds {字符串登錄{獲取;設置;}字符串通過{獲得; set;}}並將它的實例傳遞給命令。要從密碼文本框中檢索文本,您應該在xaml中將x:Name屬性分配給此文本框,並通過代碼隱藏中的this.nameOfPassTextbox.Text獲取它。 –

相關問題