2

我目前正在使用Silverlight 4並遵循MVVM模式。我已經登錄綁定到我的視圖模型,而像這樣:如何讓Silverlight數據綁定在用戶類型中更新模型?

<PasswordBox Password="{Binding Path=Password, Mode=TwoWay}" /> 

我再後來就都綁定到一個命令按鈕,它會監聽視圖模型的的PropertyChanged事件和數據綁定的一個已更新其數據,它檢查是否有足夠的數據來啓用登錄按鈕。

但是,PropertyChanged事件僅在用戶從其中一個控件更改焦點時觸發,我希望每次擊鍵都更新模型,以便登錄按鈕儘快啓用。

回答

5

創建行爲:

public class UpdateSourceOnPasswordChanged : Behavior<PasswordBox> 
{ 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.PasswordChanged += OnPasswordChanged; 
    } 

    private void OnPasswordChanged(object sender, RoutedEventArgs e) 
    { 
     var binding = AssociatedObject.GetBindingExpression(PasswordBox.PasswordProperty); 
     binding.UpdateSource(); 
    } 

    protected override void OnDetaching() 
    { 
     base.OnDetaching(); 

     AssociatedObject.PasswordChanged -= OnPasswordChanged; 
    } 
} 

和修改XAML:

<PasswordBox Password="{Binding Password, Mode=TwoWay}"> 
    <i:Interaction.Behaviors> 
     <local:UpdateSourceOnPasswordChanged/> 
    </i:Interaction.Behaviors> 
</PasswordBox> 

現在物業密碼將更新爲用戶類型。

+0

閱讀,這看起來像這樣會工作,但它需要某種額外的框架來運行?就我所見,行爲不是標準的Silverlight基類。 – Nidonocu 2010-02-18 02:47:10

+2

http://expressionblend.codeplex.com/ – 2010-02-18 03:11:59

+0

謝謝,得到它的工作,我正在查看行爲系統,以查看它可以幫助我的地方。謝謝! – Nidonocu 2010-02-18 21:45:44

0

我建議使用一種行爲來偵聽PasswordBox的OnKeyDown事件並從那裏觸發ViewModel的事件(或者運行一些其他想要附加到PropertyChanged事件的自定義代碼)。數據綁定TextBoxes及其派生(如PasswordBox)不會更新,直到失去焦點,因此您必須手動更新綁定。

相關問題