ApplicatonBarIconButton不能使TextBox失去焦點的問題(涉及到Twoway綁定)

        現在這個版本(芒果)的window phone sdk中,如果頁面上放置一個TextBox,點擊ApplicatonBarIconButton後,TextBox的焦點並不會失去,這個不知道算不算是一個Bug,但是確實給開發帶來了一些不便,特別涉及到twoway綁定的時候。

WP的TextBox的Text綁定屬性UpdateSourceTrigger只有兩個值:Default和Explicit,默認當然是Default了,這個Default代表的就是當TextBox失去焦點的時候,纔會去改變通過TwoWay方式綁定的ViewModel中的屬性。

       WP的這種綁定策略會給一些開發帶來不便。比如一個頁面中一個TextBox通過Twoway的方式綁定到ViewModel的一個屬性上,改變TextBox的值,然後點擊ApplicatonBarIconButton按鈕保存剛纔TextBox的值。預期應該是能夠保存的,但是結果是並沒有保存。主要原因還是點擊ApplicatonBarIconButton後TextBox並沒有失去焦點,所以也就不會去改變ViewModel中的綁定屬性的值。

上面囉嗦的說了一大堆,其實就是主要的問題就在點擊 ApplicatonBarIconButton後TextBox沒有失去焦點。

下面記錄一下幾種解決方法。

1、設置 UpdateSourceTrigger屬性的值爲Explicit,然後給這個TextBox添加TextChanged事件,在TextChanged事件中更新TextBox的值。代碼如下:

private void OnTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)

複製代碼
{
   TextBox textBox = sender as TextBox;
   if (textBox != null)
     {
        BindingExpression bindingExpr = textBox.GetBindingExpression(TextBox.TextProperty);
        if (bindingExpr != null)
          {
             bindingExpr.UpdateSource();
          }
     }
複製代碼

 } 

這種方案,大家一看就明白了,就是隻要TextBox中文字改變就更新綁定,這個可以解決失去焦點後不能獲得綁定的問題,但是如果你的應用程序不需要TextBox每次改變都要處理的話,這種方法就有點太...

 2、這種方法的原理和1一樣,但是處理方式有點區別。那就是在頁面中寫一個方法專門處理TextBox綁定的問題。然後在ApplicatonBarIconButton的Click事件中調用這個方法,這樣可以只執行一次更新。方法代碼如下:

 // 處理textbox的焦點問題

複製代碼
        private void BindCurrentTextBox()
        {
            TextBox textBox = FocusManager.GetFocusedElement() as TextBox;
            if (textBox != null)
            {
                BindingExpression be = textBox.GetBindingExpression(TextBox.TextProperty);
                if (be != null)
                {
                    be.UpdateSource();
                }
            }
        }
複製代碼

 大家應該發現這個方法中的代碼和上面的差不多,哈哈,就是差不多,原理都是一樣的,就是處理的位置不一樣而已。

然後在 ApplicatonBarIconButton的Click事件中,在需要處理和綁定屬性相關的方法之前調用這個方法就可以了。

 

 

其實以上兩個方法,並沒有解決掉點擊 ApplicatonBarIconButton之後TextBox沒有失去焦點的問題,只是通過其他方法在點擊之後能很好的獲得TextBox的值。

 (以上方法並非個人原創,本人只是收集整理一下)

如果大家有什麼更好的方法,請不吝賜教,先謝謝了。 


轉自:http://www.cnblogs.com/acles/archive/2012/03/29/2422522.html

發佈了39 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章