2014-01-30 17 views
1

當我將文本綁定到iOS上的輸入時,每次在iOS上添加角色時調用setter,但在Android上不會。安裝程序文本只在Android上編輯後調用,在iOS上運行

如果我在綁定到iOS中的TextField的屬性上放置斷點,每次輸入一個字符時,都會調用屬性設置器,但不會在Android EditText上調用。

它使更復雜的ViewModels與附接到在iOS Android上完全無用的測試的getter/setter幾個輸入,因爲它不能被使用。

有沒有辦法使「MvxBind =」 TEXT SomeProperty」在Android像個iOS的?

活動,如‘AfterTextChanged’(任何約束力的命令)不是財產友好,而且會打破我的ViewModel,我不希望有一個平臺相關的解決方法。

[編輯]

// Droid. It calls the TotalAmount setter once the editing is done. 
<EditText local:MvxBind="Text TotalAmount, 
Mode=OneWayToSource; Text TotalAmountString, Mode=OneWay" /> 

// Touch. It calls the TotalAmount setter on key press. 
set.Bind(MyTotalAmountTextField) 
.For(v => v.Text) 
.To(vm => vm.TotalAmount).OneWayToSource(); 

set.Bind(MyTotalAmountTextField) 
.For(v => v.Text) 
.To(vm => vm.TotalAmountString).OneWay(); 

順便說一句,在顯示屬性始終格式化一個美元符號,這就是爲什麼我使用半雙工方法進行結合。

從這個活(iOS)與編輯後(Droid)問題的公寓,綁定運行良好。

+1

您可以編輯的問題,以顯示您正在使用iOS和Android上綁定的代碼? (默認綁定通常在兩者上都以相同的方式工作) – Stuart

回答

2

TwoWayText的默認行爲在Android和iOS兩個結合是每個字符結合做。

你可以看到這種行爲,例如,N = 0在18:43視頻 - 那麼我想它可能是下以某種方式http://youtu.be/_DHDMNB_IeY?t=18m43s

如果你是不是在你的EditText看到這種行爲你的應用程序,或者也許是一個錯誤(例如,可能在某種程度上綁定了OneWayToSource - 這當然不像其他綁定模式那樣常用)。

要解決這個問題,我只能認爲建議:

  1. 登錄它作爲在GitHub上/ MvvmCross可重現的情況下(GitHub庫)的問題 - 別人有可能能夠幫助 - 或者你可能能夠自己修復它。
  2. 嘗試TwoWay而是結合
  3. 嘗試創建自己的自定義綁定或您自己的自定義控制 - 這其實是很容易的事 - 看教程上http://mvvmcross.blogspot.com N = 28和N = 18 - 例如,你可以嘗試繼承從EditText創建類似的東西;

    public class MyEditText : EditText { 
        public MyEditText(Context c, IAttributeSet a) { 
         this.AfterTextChanged += (s,e) => MyTextChanged.Raise(this); 
        } 
    
        public event EventHandler MyTextChanged; 
        public string MyText { 
         get { return Text; } 
         set { Text = value; } 
        } 
    } 
    
相關問題