2014-02-10 72 views
1

第一次使用MvvmCross Value轉換器。我創建了一個值轉換器來處理bool之間的數據操作?元素在我的視圖和我的視圖模型中的布爾屬性。爲什麼不調用MvvmCross Value Converter的ConvertBack方法?

​​

而我在視圖的ViewDidLoad中將我的視圖元素綁定到視圖模型。

var set = this.CreateBindingSet<SettingsView, SettingsViewModel>(); 
set.Bind(wifiOnlyElement).For(View => View.BooleanValue).To(ViewModel => ViewModel.ConnectOnWifiOnly).WithConversion("NullableBoolean").TwoWay(); 
set.Apply(); 

注:我添加了.TwoWay()結合修改器set.Bind,思維模式可能必須明確指出,沒有任何變化。

當視圖出現時,調用NullableBooleanValueConverter的Convert方法。

但是,當視圖關閉時,不會調用相應的ConvertBack方法。

基於this question我懷疑我沒有綁定到正確的屬性。我創建綁定的屏幕控件是Xamarin對話框/元素類的後繼自定義UITableViewCell,此屏幕控件上的可空布爾值是公共的,這是在輕擊元素時存儲真/假值的位置。

BooleanValue是名爲CheckboxElement的Dialog/Element類上的公共屬性,它繼承自基礎Element類。

NSObject 
    |_ Element 
     |_ CheckboxElement 
      .BooleanValue 

有一個在CheckboxElement被覆蓋的屬性調用選擇,當元素被竊聽改變BooleanValue中的價值。

public override void Selected(DialogViewController dvc, UITableView tableView, NSIndexPath indexPath) 
{ 
    BooleanValue = !BooleanValue; 
    ... 
} 

所選內容由DialogViewController的RowSelected方法調用。

public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
{ 
    Container.Selected(indexPath); 
} 

它調用DialogViewController的Selected方法(元素是CheckboxElement)。

public virtual void Selected(NSIndexPath indexPath) 
{ 
    var section = Root.Sections[indexPath.Section]; 
    var element = section.Elements[indexPath.Row]; 

    ActiveElement = element; 

    element.Selected(this, Root.TableView, indexPath); 
} 

看起來不像有什麼事,有沒有介入這。

讓我知道你是否需要更多信息。提前致謝。

+0

你可以編輯問題來添加'BooleanValue'在視圖上的內容,以及當它發生變化時通知綁定的內容。例如它是一個複選框? – Stuart

+0

@Stuart - 在內嵌上面添加了額外的BooleanValue信息。如果我需要詳細說明或發佈更多的代碼,請告訴我。 – billmaya

回答

1

Mvvmcross依靠事件通知來告訴它值何時發生變化。

當事件通知不可用時,您可以編寫自定義綁定來幫助MvvmCross知道ui更新的時間。有關這方面的,見N = 28 - 定製,在http://mvvmcross.blogspot.com

綁定Monotouch.Dialog的特定情況下,Mvvmcross提供它自己的分支,它包括雙向綁定布爾元素,如基於UiSwitch元素。您可能會發現使用此mvvmcross分支更容易 - 有關更多信息,請在n + 1個視頻中查找對話框。

相關問題